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

14

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

Eu ouvi isso kill -9ou kill -SIGKILLé ruim, mas não entendo o porquê. Se eu não deveria, kill -9o que devo fazer para matar um processo?

dimo414
fonte
2
A premissa da pergunta está errada. SIGKILL é apenas uma ferramenta. É recomendado em algumas situações e não é recomendado em outras situações (como todas as outras ferramentas).
Kubanczyk # 6/16
@kubanczyk com certeza, mas é uma ferramenta frequentemente mal aplicada e usada sem entender seu objetivo. Eu já vi muitos tópicos em que A diz " Just kill -9it ", OP diz " ótimo, isso funcionou! Vou lembrar disso a partir de agora! ", E B chega para avisar que "a espera kill -9é perigosa! " Somente depois do fato.
dimo414

Respostas:

15

SIGKILLretira o tapete do seu processo de execução, encerrando-o imediatamente. Para programas muito simples, tudo bem; na prática, porém, existem muito poucos programas "simples".

Nos bastidores, até os programas aparentemente triviais realizam todo tipo de trabalho transacional do qual precisam limpar antes de terminar (pense no finallybloco em Java e outras linguagens de programação), como fechar identificadores de recursos, excluir arquivos temporários e liberar dados de 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 poderá 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 SIGKILLe deve ter certeza de que esgotou suas alternativas antes de fazê-lo. Em muitos casos, a reinicialização (que acabará enviando SIGKILLs para programas que se comportam mal) é mais segura do que enviar manualmente a SIGKILLsi mesmo. Provavelmente posso contar com uma mão o número de vezes que precisei enviar uma SIGKILL(e provavelmente toda a minha criação).

De um modo geral, você pode usar Ctrl+ C(que envia o processo em primeiro plano a SIGINT) ou SIGTERM(como em "encerrar") para instruir um processo a parar o que está fazendo e sair.

Algumas leituras adicionais:

dimo414
fonte