Comment reprendre la fonctionnalité du terminal après avoir lancé la commande "suspendre"?

8

J'ai tapé suspendmon terminal et il a suspendu l'exécution.

Comment revenir au fonctionnement normal du terminal? J'ai essayé Ctrl+ C, Ctrl+ D, Ctrl+ Q( comme suggéré ici ) et Ctrl+ Z, mais aucun de ces travaux. Bien sûr, je peux fermer le terminal et en ouvrir un nouveau, mais n'y a-t-il aucun moyen de "reprendre" la fonctionnalité du terminal?

J'utilise Ubuntu GNOME 16.04, avec le shell par défaut (bash).

Cerberus
la source
Désolé pour ce que je demande ici, mais quel est le but de cette commande?
pa4080
1
Pour arrêter l'exécution d'un script et le faire continuer plus tard;)
Rinzwind

Réponses:

10

Depuis votre lien:

jusqu'à ce qu'il reçoive un signal SIGCONT.

Ce serait donc kill -SIGCONT {pid}

  • killall -CONT bash reprendrait tout.
  • kill -18 {pid} serait le même.
  • Et il en est de même kill -s CONT {pid}

Selon cette liste, il doit s'agir de control-z mais vous devez utiliser control-z pour arrêter le processus:

18 - SIGCONT - Resume process, ctrl-Z (2nd)
19 - SIGSTOP - Pause the process / free command line, ctrl-Z (1st)

Vous avez besoin du {pid} de la session shell exécutée dans le terminal


Et il y a aussi des commandes de contrôle des travaux :

fg, bg

The fg command switches a job running in the background into the foreground. 
The bg command restarts a suspended job, and runs it in the background. 
If no job number is specified, then the fg or bg command acts 
upon the currently running job.
Rinzwind
la source
Cela devrait également être Ctrl + Q, mais cela ne fonctionne pas pour une raison quelconque. Je suppose que puisque le shell est suspendu, il ne peut pas recevoir le Ctrl + Q (SIGCONT) de la session suspendue. Cela fonctionne si, comme vous le dites, vous utilisez, kill -SIGCONT PIDmais je ne trouve pas un moyen simple d'obtenir le PID de la session suspendue lorsque j'ai de nombreux terminaux ouverts.
terdon
Ça ne marche pas. J'ai utilisé ps aux | terme grep pour obtenir le pid du terminal, a essayé les 3 variantes de SIGCONT mais aucune n'a fonctionné. Quand je viens de tuer pid, le terminal s'est fermé, donc j'ai eu le bon pid.
Cerberus
@Cerberus, vous voulez que le PID de la session shell s'exécute dans le terminal, pas celui du terminal lui-même. Si vous n'avez qu'un seul terminal ouvert, il devrait être facile à trouver avec pgrep bash. Sinon, utilisez pstree -p, recherchez le PID du terminal et regardez les PID de ses enfants, dont l'un devrait être votre session bash.
terdon
J'aurai besoin d'avoir deux sessions de terminal au moins dans le scénario, une qui est suspendue et l'autre à partir de laquelle envoyer SIGCONT.
Cerberus
1
SIGCONT est normalement ignoré, alors pourquoi ne pas simplement tirer killall -CONT bash? :-)
Jonas Schäfer