Existem vários sinais cuja disposição padrão é finalizar o processo. O sinal final de terminação é SIGKILL, pois não pode ser tratado e o processo não tem escolha a não ser morrer. No entanto, isso também significa que, se você o enviar, o processo será privado de uma oportunidade de limpeza. Portanto, boas maneiras exigem o envio de um sinal como o SIGTERM, que pode ser tratado primeiro e somente se o processo não terminar após algum tempo, enviá-lo à SIGKILL.
Observe que SIGINT e SIGQUIT não são bons candidatos para o encerramento arbitrário do processo. Devido ao fato de poderem ser gerados a partir do teclado do terminal, muitos aplicativos os utilizam para fins especiais. Por exemplo, o interpretador python usa SIGINT para gerar KeyboardInterrupt
exceção (também em sessões interativas em python, onde ele simplesmente retorna ao prompt) e a JVM usa SIGQUIT para despejar rastreamentos de pilha. SIGINT e SIGQUIT permanecem eficazes para a maioria dos utilitários de linha de comando padrão, como find
ou cat
.
Durante o desligamento do sistema, a maioria dos sistemas UNIX e Linux envia o SIGTERM para todo o processo, seguido de 5 segundos de espera, seguido pelo SIGKILL. Esta é a maneira recomendada de encerrar com segurança um processo arbitrário.
Observe também que mesmo o SIGKILL pode não finalizar um processo preso em uma espera ininterrupta até que o processo seja ativado.
SIGKILL
.