Eso es equivalente a presionar Ctrl+Zotros comandos.
Suspende el shell y devuelve el control al shell principal o al proceso, si lo hay.
Ejemplo:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
La característica proviene de csh, el shell de BSD (de donde proviene el control del trabajo) a principios de los 80 .
En AT&T ksh
, es un alias incorporado para kill -s STOP $$
( sí, ¡sin las comillas! )
En su caso, bash
probablemente fue el que inició directamente el emulador de terminal. Y su emulador de terminal no esperaba que se suspendiera el proceso.
Ese bash
fue un líder de sesión. Si el líder de la sesión se suspende, si consideramos los terminales antiguos, el usuario no tendrá forma de reanudarlo.
bash
aborda eso al negarse suspend
si es un shell de inicio de sesión. Pero en su caso, su emulador de terminal probablemente no se inicia bash
en el modo de inicio de sesión, por lo que la protección no está en su lugar.
zsh
y mksh
no tienen el problema porque envían una señal SIGTSTP
(la que también se envió Ctrl+Z) como csh en lugar de SIGSTOP
(y al grupo de proceso de la persona que llama mksh
como en csh, y al grupo de proceso principal del shell para zsh
, no $$
solo el proceso ) SIGTSTP
se ignora cuando se entrega a un grupo de proceso huérfano y el grupo del líder califica. La idea es que SIGTSTP no debe suspender algo que un usuario no puede reanudar.
En mksh
o yash
, también se puede usar suspend
para que una subshell se suspenda:
$ (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
Eso no funcionaría con zsh
eso envía el SIGTSTP al grupo de proceso principal en lugar del llamador. En cualquier shell que tenga kill
incorporado, siempre se puede usar kill -s TSTP 0
en su lugar.