Matar processos à vontade não é uma ação fácil: os dados podem ser perdidos, os aplicativos mal projetados podem se quebrar de maneiras sutis que não podem ser corrigidas sem a reinstalação .. mas isso depende completamente de saber o que é e o que não é seguro em um dada situação. e o que estaria em risco. O usuário deve ter uma idéia do que um processo está ou deve estar fazendo e quais são as restrições (IOPS de disco, rss / swap) e ser capaz de estimar quanto tempo um processo demorado deve levar (por exemplo, uma cópia de arquivo, reencodificação de mp3, migração de e-mail, backup, [seu horário favorito aqui].)
Além disso, enviar SIGKILL
a um pid não é garantia de matá-lo. Se ele estiver preso em um syscall ou já estiver zumbido ( Z
in ps
), ele poderá continuar zumbido. Esse é geralmente o caso de um longo processo de execução e esquecimento bg
antes de tentar kill -9
. Um simples fg
reconectará stdin / stdout e provavelmente desbloqueará o processo, geralmente seguido pelo término do processo. Se ele estiver travado em outro lugar ou em alguma outra forma de conflito do kernel, apenas uma reinicialização poderá remover o processo. (Os processos zumbis já estão mortos após SIGKILL
serem processados pelo kernel (nenhum código adicional da terra do usuário será executado), geralmente há uma razão do kernel (semelhante a estar "bloqueado" esperando a conclusão de um syscall) pelo processo não terminar.)
Além disso, se você deseja matar um processo e todos os seus filhos, adquira o hábito de ligar kill
com o PID negado, não apenas o PID em si . Não há nenhuma garantia de SIGHUP
, SIGPIPE
ou SIGINT
ou outros sinais limpeza após isso, e ter um monte de processos renegados para limpeza (lembre-se vira-lata?) É irritante.
Bônus maligno: kill -9 -1
é um pouco mais prejudicial do que kill -9 1
(não faça isso como root, a menos que queira ver o que acontece em uma VM descartável e não importante)