No Linux, você pode gerenciar processos enviando sinais a eles. O comando principal para isso é o kill, que, apesar do nome, pode enviar vários sinais, não apenas aqueles que terminam um processo.
Terminação Padrão com kill sigterm
Quando você usa o comando kill apenas com um ID de Processo (PID), ele envia um sinal TERM por padrão. Esta é a maneira padrão e elegante de solicitar que um programa termine.
kill 12445
O sinal kill sigterm (também conhecido como SIGTERM ou sinal 15) solicita que o processo seja encerrado de forma limpa. Isso dá ao processo a chance de salvar seu progresso e liberar recursos adequadamente. Você também pode usar explicitamente o número do sinal, tornando kill -15 12445 equivalente ao comando acima. Isso aborda a consulta comum kill -15 linux.
Forçando a Terminação com SIGKILL
Às vezes, um processo fica sem resposta e não reage a um sinal SIGTERM. Nesses casos, você pode forçá-lo a parar usando o sinal KILL.
kill -9 12445
O sinal SIGKILL (sinal 9) termina o processo imediatamente, sem dar a ele a chance de limpeza. Esta é uma diferença fundamental no debate kill vs terminate; SIGKILL é uma terminação incondicional, enquanto SIGTERM é um pedido educado.
Entendendo Outros Sinais Comuns
Embora SIGTERM e SIGKILL sejam os mais comuns, outros sinais também são úteis para o gerenciamento de processos.
- SIGHUP: O sinal
kill sighup(Hangup, sinal 1) é tradicionalmente enviado a um processo quando seu terminal de controle é fechado. Ele pode ser usado para instruir processos daemon a recarregar seus arquivos de configuração. - SIGINT: O sinal de Interrupção (sinal 2) é enviado quando você pressiona
Ctrl-C. Ele solicita que o processo interrompa sua operação atual. - SIGSTOP: Este sinal (sinal 19) pausa um processo sem terminá-lo. O processo pode ser retomado mais tarde com o sinal
SIGCONT.
Verificando a Existência do Processo com kill -0
Um caso de uso especial é linux kill -0. Este comando não envia um sinal de fato, mas verifica se um processo com o PID especificado existe e se você tem permissão para enviar um sinal a ele.
kill -0 12445
Se o comando for executado com sucesso (código de saída 0), o processo existe. Se falhar, o processo não existe ou você não tem permissões.