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:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
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é pour kill -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 refusant suspend
s'il s'agit d'un shell de connexion. Mais dans votre cas, votre émulateur de terminal ne démarre probablement pas bash
en mode connexion, de sorte que la sauvegarde n'est pas en place.
zsh
et mksh
n'ont pas le problème car ils envoient un signal SIGTSTP
(celui également envoyé sur Ctrl+Z) comme csh au lieu de SIGSTOP
(et au groupe de processus de l'appelant pour mksh
comme dans csh, et au groupe de processus principal du shell pour zsh
, 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
ou yash
, on peut aussi utiliser suspend
pour faire suspendre un sous-shell:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
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 a kill
intégré, on peut toujours utiliser à la kill -s TSTP 0
place.