Existem vários sinais cuja disposição padrão é encerrar o processo. O último sinal de terminação é SIGKILL, uma vez que não pode ser manipulado e o processo não tem outra escolha senão morrer. Isso, no entanto, também significa que, se você enviá-lo, o processo é privado de uma oportunidade de limpeza. Portanto, as boas maneiras exigem o envio de um sinal como SIGTERM, que pode ser tratado primeiro e somente se o processo não sair depois de algum tempo. SIGKILL.
Note que SIGINT e SIGQUIT não são bons candidatos para terminação arbitrária de processos. Devido ao fato de que eles podem ser gerados a partir do teclado do terminal, muitos aplicativos os utilizam para fins especiais. Por exemplo, o interpretador python usa o SIGINT para gerar KeyboardInterrupt
exception (também em sessões python interativas em que ele simplesmente retorna ao prompt) e a JVM usa o SIGQUIT para despejar rastreamentos de pilha. O SIGINT e o SIGQUIT permanecem efetivos 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 enviam SIGTERM para todo o processo, seguido por 5 segundos de espera, seguidos por SIGKILL. Essa é a maneira recomendada de encerrar com segurança um processo arbitrário.
Note também que mesmo o SIGKILL não pode encerrar um processo preso em uma espera ininterrupta até que o processo seja ativado.