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, bashprobablemente fue el que inició directamente el emulador de terminal. Y su emulador de terminal no esperaba que se suspendiera el proceso.
Ese bashfue 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.
bashaborda eso al negarse suspendsi es un shell de inicio de sesión. Pero en su caso, su emulador de terminal probablemente no se inicia bashen el modo de inicio de sesión, por lo que la protección no está en su lugar.
zshy mkshno 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 mkshcomo en csh, y al grupo de proceso principal del shell para zsh, no $$solo el proceso ) SIGTSTPse 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 mksho yash, también se puede usar suspendpara 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 zsheso envía el SIGTSTP al grupo de proceso principal en lugar del llamador. En cualquier shell que tenga killincorporado, siempre se puede usar kill -s TSTP 0en su lugar.