Por que não devo usar 'kill -9' / SIGKILL

7

Postando esta pergunta porque fiquei surpreso por não encontrá-la diretamente respondida; desculpas se esta é uma duplicata - eu olhei!

Ouvi dizer que kill -9 ou kill -SIGKILL é ruim, mas não entendo o motivo. Se eu não deveria kill -9 o que deveria eu faço para matar um processo?

    
por dimo414 06.05.2016 / 08:17

1 resposta

9

SIGKILL retira o tapete do processo em execução, finalizando-o imediatamente. Para programas muito simples, tudo bem; na prática, porém, existem muito poucos programas "simples".

Nos bastidores, até mesmo programas aparentemente triviais fazem todo tipo de trabalho transacional que precisam ser limpos antes de serem finalizados (pense no bloco finally em Java e em outras linguagens de programação), como fechar identificadores de recursos, excluir temporário arquivos e liberando dados da memória para o disco. Você não pode prever quando um programa pode estar fazendo algo assim.

Se você tiver sorte, não notará nada de errado se enviar um SIGKILL , mas não terá sorte para sempre, e talvez não saiba que algo deu errado até que seja tarde demais para recuperar o que foi perdido.

Você quase nunca precisa enviar um SIGKILL e deve ter certeza de que esgotou suas alternativas antes de fazer isso. Em muitos casos, a reinicialização (que acabará enviando SIGKILL s para programas que não se comportam corretamente) é mais segura do que enviar manualmente um SIGKILL para você mesmo. Eu provavelmente posso contar em uma mão o número de vezes que precisei para enviar um SIGKILL (e provavelmente tudo que eu mesmo fiz).

Em geral, você pode usar Ctrl + C (que envia o processo de foreground a SIGINT ) ou SIGTERM (como em "terminate") para instruir um processo para parar o que está fazendo e sair.

Algumas outras leituras:

por 06.05.2016 / 08:17

Tags