Quando você tenta encerrar um processo para sempre, qual opção para “matar” você deve usar?

25

Estou recebendo muitas mensagens confusas das pessoas e queria saber se realmente não há muita diferença no que você usa.

kill 'x'
killall 'x'
kill -9 'x'

Estas são algumas das opções que me disseram para usar até agora, mas algumas pessoas dizem que matar -9 é um exagero, matar por si só não funciona, etc.

Alguém tem algum conselho sobre qual deve ser usado no caso mais comum de apenas terminar um processo (e, portanto, seu estado também)?

[edit] Eu estou procurando o que usar quando você quer parar a execução do seu processo para que você possa executar um novo, fresco desde o início

    
por Chuck Testa 08.01.2012 / 00:41

2 respostas

23

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.

    
por 08.01.2012 / 01:44
13

Você deve começar com o mais gentil e escalar a partir daí. Isso significa, SIGINT, SIGTERM, SIGQUIT, SIGKILL. Embora a maioria das pessoas pule o SIGINT e o SIGQUIT.

    
por 08.01.2012 / 00:53