Dies entspricht dem Drücken Ctrl+Zanderer Befehle.
Es setzt die Shell aus und gibt die Kontrolle an die übergeordnete Shell oder den übergeordneten Prozess zurück, falls vorhanden.
Beispiel:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
Das Feature stammt von csh, der BSD-Shell (von der die Job-Kontrolle stammt) in den frühen 80ern .
In AT & T ksh
ist es ein eingebauter Alias für kill -s STOP $$
( ja, ohne Anführungszeichen! )
In deinem Fall bash
wurde wahrscheinlich der direkt vom Terminalemulator gestartet. Und Ihr Terminal-Emulator hat nicht damit gerechnet, dass der Prozess unterbrochen wird.
Das bash
war ein Sitzungsleiter. Wenn der Sitzungsleiter suspendiert ist und wir die Ansicht alter Zeitterminals vertreten, hat der Benutzer keine Möglichkeit, diese fortzusetzen.
bash
behebt dies, indem es ablehnt, suspend
wenn es sich um eine Anmeldeshell handelt. In Ihrem Fall startet der Terminal-Emulator jedoch möglicherweise nicht bash
im Anmeldemodus, sodass keine Sicherheitsvorkehrungen getroffen werden.
zsh
und mksh
haben Sie nicht das Problem, weil sie ein SIGTSTP
(das auch gesendete Ctrl+Z) Signal wie csh anstelle von SIGSTOP
(und an die Prozessgruppe des Aufrufers für mksh
wie in csh und an die Hauptprozessgruppe der Shell für zsh
, nicht den $$
Prozess allein, senden ). SIGTSTP
wird ignoriert, wenn sie an eine verwaiste Prozessgruppe übergeben wird, und die Gruppe des Anführers qualifiziert sich. Die Idee ist, dass SIGTSTP nichts aussetzen sollte, was von einem Benutzer nicht wieder aufgenommen werden kann.
In mksh
oder yash
kann auch suspend
eine Subshell verwendet werden, um sich auszusetzen:
$ (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
Das würde nicht funktionieren, zsh
wenn SIGTSTP anstelle des Aufrufers an die Hauptprozessgruppe gesendet wird. In jeder Shell, die kill
eingebaut ist, kann man immer kill -s TSTP 0
stattdessen verwenden.