J'ai tapé help suspend
et obtenu cette courte explication:
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
Voici ce que je comprends: je tape suspend
et le terminal se bloque, même strg + c ne peut pas le dégeler. Mais lorsque j'ouvre un autre terminal et recherche le PID pour le gelé et que je tape, kill -SIGCONT PID-NR
un signal SIGCONT est envoyé au terminal gelé et le décongèle, de sorte qu'il se dégèle.
Mais quel est le véritable objectif de la suspension d'un terminal? Quelles applications quotidiennes lui sont typiques? À quoi pensaient les gens qui en ont fait un obus intégré?
bash
signals
suspend
shell-builtin
sharkant
la source
la source
Réponses:
Si vous démarrez un shell à partir d'un autre shell, vous pouvez suspendre le shell interne. Dites lors de l'utilisation
su
et que vous souhaitez revenir à l'utilisateur normal pendant un moment:(Si vous faites cela, n'oubliez pas le shell privilégié ouvert en arrière-plan ...)
De même, si vous échappez à un shell à partir d'un autre programme (la
!
commande par exempleless
), vous pouvez toujours suspendre le shell. Mais je ne m'attendrais pas à ce que de nombreux autres programmes le gèrent bien lorsqu'ils lancent un sous-processus, qui se suspend ensuite.la source
vim
et j'ai fait un:sh
pour obtenir un sous-shell (spécifiquement, unzsh
sous - shell). La coursesuspend
m'a fait sauter dans le shell d' origine (il a suspendu le sous-shell et le vim).zsh
semble plus intelligent que çabash
, j'ai essayé de m'échapper à la fois des deuxless
et devi
(Debianvim.tiny
): j'aizsh
arrêté l'application parent aussi,bash
suspendu le tout.bash
à desbash
œuvres bien.C'est l'équivalent d'appuyer Ctrl+Zsur d'autres commandes.
Il suspend le shell et redonne le contrôle au shell parent ou au processus, le cas échéant.
Exemple:
La fonctionnalité vient de csh, le shell de BSD (d'où vient le contrôle des tâches) au début des années 80 .
Dans AT&T
ksh
, c'est un alias intégré pourkill -s STOP $$
( oui, sans les guillemets! )Dans votre cas,
bash
est-ce probablement celui qui a été démarré directement par l'émulateur de terminal. Et votre émulateur de terminal ne s'attendait pas à ce que le processus soit suspendu.C'était
bash
un chef de session. Si le chef de session est suspendu, si nous prenons l'avis des anciens terminaux horaires, l'utilisateur n'aura aucun moyen de le reprendre.bash
résout cela en refusantsuspend
s'il s'agit d'un shell de connexion. Mais dans votre cas, votre émulateur de terminal ne démarre probablement pasbash
en mode connexion, de sorte que la sauvegarde n'est pas en place.zsh
etmksh
n'ont pas le problème car ils envoient un signalSIGTSTP
(celui également envoyé sur Ctrl+Z) comme csh au lieu deSIGSTOP
(et au groupe de processus de l'appelant pourmksh
comme dans csh, et au groupe de processus principal du shell pourzsh
, pas le$$
processus seul ).SIGTSTP
est ignoré lorsqu'il est remis à un groupe de processus orphelin, et le groupe du leader est qualifié. L'idée est que SIGTSTP ne doit pas suspendre quelque chose qui ne peut pas être repris par un utilisateur.Dans
mksh
ouyash
, on peut aussi utilisersuspend
pour faire suspendre un sous-shell:Cela ne fonctionnerait pas avec
zsh
cela envoie le SIGTSTP au groupe de processus principal au lieu de l'appelant. Dans n'importe quel shell qui akill
intégré, on peut toujours utiliser à lakill -s TSTP 0
place.la source
command .... &
mais vous J'ai oublié le&
et je souhaite maintenant que vous puissiez l'ajouter sans interrompre la commande): vous pouvez:,ctrl-z
puis tapez:bg
pour reprendre la dernière tâche suspendue en arrière-plan. (oubg %n
pour le faire avec le numéro de tâchen
. Utilisezjobs
pour obtenir une liste des tâches suspendues ou en cours)suspend
commande réelle .