O Ctrl + Z é na verdade um recurso da interface do terminal genérica no kernel, não do bash. Isso faz com que um sinal SIGTSTP seja enviado para o processo de primeiro plano. Da mesma forma Ctrl + C envia SIGTERM e Ctrl + \ envia SIGQUIT.
Existem duas maneiras pelas quais um programa pode fazer com que Ctrl + Z perca seu efeito.
- O programa pode ignorar o sinal SIGTSTP.
Você pode verificar o comportamento do sinal de um processo com um depurador. No Linux, a informação está disponível através de/proc
:grep Sig /proc/1234/status
onde 1234 é o ID do processo mostra quais sinais são ignorados (SigIgn
, eles apenas são devolvidos inofensivamente) ou bloqueados (SigBlk
, eles são colocados em espera até que o programa os deixe entrar). O número é um bitmask e escrito em hexadecimal. SIGTSTP é o sinal 20 (executekill -l
no bash), então é ignorado se na linhaSigIgn
, o quinto dígito da direita é 8 ou acima. - O programa pode alterar as combinações de teclas.
Você pode verificar as associações de teclas atuais com uma linha de comando comostty -a </dev/pts/42
, em que/dev/pts/42
é o terminal em que o processo está em execução. Procure porsusp = ^Z
.
Um daemon provavelmente ignorará a maioria dos sinais. Lance-o em segundo plano, se ele não for bifurcado por si só (a maioria dos daemons realmente bifurca um filho assim que ele inicia e deixa o pai imediatamente). Se você o lançou em primeiro plano, existem muitas maneiras de se recuperar (envie um sinal para ele ou para o shell pai), mas você precisará de outro shell para isso.