A veces, enviar un SIGTERM a un proceso hará que envíe SIGTERM a todos sus procesos secundarios. Sin embargo, a veces esto no funciona.
¿Hay un comando o una utilidad que me permita matar un proceso y todos sus procesos secundarios al mismo tiempo? Por lo general, recurro a la recopilación manual de todos los pids en un comando de matar, pero se siente estúpido.
Esta pregunta SO pregunta cómo hacer esto con Perl, pero cualquier cosa que haga el trabajo sería genial.
pkill -9
es más poderoso quepkill
, por cualquier razón.Respuestas:
Esta pregunta SO cubre esto.
fuente
Suponiendo que los procesos comparten un identificador de sesión (que deberían a menos que hayan llamado explícitamente setsid (), puede matarlos por sesión usando pkill:
Si desde otra terminal hago:
Entonces todo muere de un solo golpe.
De manera similar, puede matar por grupo de procesos, aunque esto tiende a ser más útil para muchos niños que están todos un nivel por debajo de un padre, no una cadena de procesos asociados.
fuente
Por lo general, un cliente que responde debe recibir un sigterm y desconectarse de sí mismo, finalizando así todos sus procesos secundarios bifurcados. Si, por otro lado, el cliente no responde, una señal de terminación normal probablemente no provocará ninguna respuesta.
Entonces, procede a enviar un SIGKILL, que le dice al sistema que haga que el proceso se detenga, ahora, lo que puede hacer la mayoría de las veces, excepto cuando el proceso está en un estado de suspensión ininterrumpida, como esperar alguna E / S entrada o similar.
En ese caso, incluso el SIGKILL terminará sin hacer nada al proceso; el proceso del niño probablemente tendrá un estado similar de retraso.
Hay un caso límite en el que el proceso padre podría terminar bien, pero el proceso hijo no se puede matar. Luego terminarás con un proceso zombie que no se puede limpiar ya que su padre ya no está, pero no responde a nada. La única forma de deshacerse de ellos es reiniciando; en la mayoría de los casos, sin embargo, son bastante inofensivos, ya que lo único que hacen es tomar un PID mientras que cualquier socket que intentaron usar ya se ha marchitado.
fuente
Si quiero matar el árbol de procesos de Firefox, entonces es posible matarlo con el comando anterior "pkill -9 -s firefox"
fuente