É o equivalente a pressionar Ctrl+Zem outros comandos.
Ele suspende o shell e devolve o controle ao shell ou processo pai, se houver.
Exemplo:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
O recurso vem do csh, o shell do BSD (de onde vem o controle de tarefas) no início dos anos 80 .
Na AT&T ksh, é um alias interno para kill -s STOP $$( sim, sem as aspas! )
No seu caso, bashprovavelmente foi o iniciado diretamente pelo emulador de terminal. E o seu emulador de terminal não esperava que o processo fosse suspenso.
Esse bashfoi um líder de sessão. Se o líder da sessão for suspenso, se considerarmos os terminais antigos, o usuário não terá como retomar isso.
bashendereços que, recusando suspendse for um shell de login. Mas no seu caso, seu emulador de terminal provavelmente não inicia bashno modo de logon, de modo que a proteção não está em vigor.
zshe mkshnão tem o problema porque eles enviam um sinal SIGTSTP(o que também foi enviado Ctrl+Z) como csh, em vez de SIGSTOP(e para o grupo de processos do chamador, mkshcomo no csh, e para o grupo de processos principal do shell zsh, não apenas o $$processo ) SIGTSTPé ignorado quando entregue a um grupo de processos órfãos e o grupo do líder é qualificado. A idéia é que o SIGTSTP não suspenda algo que não possa ser retomado por um usuário.
Em mkshou yash, também se pode usar suspendpara que um 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
Isso não funcionaria com zsho envio do SIGTSTP ao grupo de processos principal em vez do chamador. Em qualquer shell que tenha sido killconstruído, sempre é possível usar kill -s TSTP 0.