Os sinais são enviados na ordem em que você os digita via terminal para o kernel. Se você usar Ctrl + C você está instruindo o kernel a enviar o sinal SIGINT, para o grupo de processos em primeiro plano. Ao receber isso, o comando que estava em execução será encerrado.
Com um Ctrl + Z você está enviando o sinal SIGSTP. O que realmente não mata o processo, apenas diz para parar temporariamente. Quando isso é usado, você pode retomar o processo, dizendo ao shell para trazê-lo de volta ao primeiro plano, através do comando fg
, ou você pode fazer o background com o comando bg
.
Se um trabalho foi parado através do sinal SIGSTP, então você pode realmente matá-lo com o comando kill
da seguinte forma:
$ kill %1
Onde %1
é o ID do trabalho que você acabou de SIGSTP.
Verificando os trabalhos parados
Você pode usar o comando job
para ver quais trabalhos foram parados em um shell da seguinte forma:
$ sleep 1000
^Z
[1]+ Stopped sleep 1000
$ jobs
[1]+ Stopped sleep 1000
Aqui eu usei Ctrl + Z para parar meu comando sleep 1000
. Na saída, o [1]
corresponde ao %1
que mencionei acima. Matá-lo assim teria o mesmo efeito que o Ctrl + C .
$ kill %1
[1]+ Terminated sleep 1000
O comando fg
e bg
que mencionei acima atuaria na tarefa que possui o sinal de mais, +
após seu número. Observe aqui, em jobs
output:
[1]+ Stopped sleep 1000
É mais óbvio se eu tiver alguns trabalhos, por exemplo:
$ jobs
[1] Stopped sleep 1000
[2]- Stopped sleep 2000
[3]+ Stopped sleep 3000
Assim, qualquer comando fg
ou bg
nulo agirá no trabalho com o +
. Posso segmentar um específico como esse:
$ fg %1
sleep 1000