É 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, bash
provavelmente foi o iniciado diretamente pelo emulador de terminal. E o seu emulador de terminal não esperava que o processo fosse suspenso.
Esse bash
foi 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.
bash
endereços que, recusando suspend
se for um shell de login. Mas no seu caso, seu emulador de terminal provavelmente não inicia bash
no modo de logon, de modo que a proteção não está em vigor.
zsh
e mksh
nã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, mksh
como 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 mksh
ou yash
, também se pode usar suspend
para 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 zsh
o envio do SIGTSTP ao grupo de processos principal em vez do chamador. Em qualquer shell que tenha sido kill
construído, sempre é possível usar kill -s TSTP 0
.