Às vezes, enviar um SIGTERM para um processo fará com que ele envie todos os seus processos filhos. No entanto, às vezes isso não funciona.
Existe um comando ou um utilitário que me permita matar um processo e todos os seus processos filhos ao mesmo tempo? Eu costumo recorrer manualmente a coletar todos os pids em um comando de matar, mas parece estúpido.
Essa pergunta do SO pergunta como fazer isso com o perl, mas qualquer coisa que faça o trabalho seria ótimo.
pkill -9
é mais poderoso do quepkill
, por qualquer motivo.Respostas:
Esta questão SO cobre isso.
fonte
Supondo que os processos compartilhem um identificador de sessão (o que eles devem, a menos que tenham explicitamente chamado setsid (), você pode matá-los por sessão usando pkill:
Se de outro terminal eu faço:
Então tudo morre de uma só vez.
Da mesma forma, você pode matar por grupo de processos, embora isso tenda a ser mais útil para muitos filhos que estão todos um nível abaixo de um pai, não uma cadeia de processos associados.
fonte
Normalmente, um cliente respondente deve receber um sigterm e desligar-se, encerrando assim todos os seus processos filhos bifurcados. Se, por outro lado, o cliente não estiver respondendo, um sinal de terminação normal provavelmente não provocará resposta.
Então, você passa a enviar um SIGKILL, que instrui o próprio sistema a interromper esse processo agora - o que pode ser feito na maioria das vezes, exceto quando o processo está em um estado de suspensão ininterrupta, como esperar por alguma E / S entrada ou similar.
Nesse caso, até o SIGKILL acabará não fazendo nada no processo; o processo filho provavelmente terá um estado semelhante de retardo.
Há um caso de fronteira em que o processo pai pode terminar muito bem, mas o processo filho não é passível de matança. Então você terminará com um processo de zumbi que não pode ser limpo desde que seu pai se foi, mas não está respondendo a nada. A única maneira de se livrar deles é uma reinicialização; na maioria dos casos, porém, são bastante inofensivos, pois a única coisa que fazem é usar um PID, enquanto o soquete que tentaram usar já desapareceu.
fonte
Se eu quiser matar a árvore de processo do Firefox, é possível matá-la com o comando acima "pkill -9 -s firefox"
fonte