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