2011-03-22 9 views
10

¿Cuál es la diferencia entre SIGTERM y SIGKILL cuando se trata del árbol de procesos?
Cuando un subproceso raíz recibe SIGKILL, ¿se lo matan limpiamente o deja sus subprocesos hijos como zombies?
¿Hay alguna señal que pueda enviarse a un subproceso raíz para salir limpiamente al no dejar ningún subproceso zombie?Diferencia entre SIGTER SIGTERM considerando el árbol de proceso

Gracias.

+1

Hay una llamada al sistema separado para matar a grupos de proceso enteras: 'killpg'. También es importante tener en claro la diferencia entre * threads * y * processes * en Linux: son cosas diferentes. – Pointy

+2

[! [La verdadera razón para no usar SIGKILL] (https://i.stack.imgur.com/SnEqw.png)] (https://i.stack.imgur.com/SnEqw.png) Probablemente quiera para mantener este cómic en mente. Fuente: http://turnoff.us/geek/dont-sigkill/ –

Respuesta

13

Si mata el proceso raíz (proceso primario), esto debería hacer huérfanos, no zombis. Los niños huérfanos se hacen cuando se mata a un padre del proceso, y el kernel hace que init sea el padre de los huérfanos. init debe esperar hasta que el huérfano muera, luego use wait para limpiarlo.

Los elementos secundarios de Zombie se crean cuando un proceso (no su elemento principal) finaliza y su elemento primario no toma su estado de salida de la tabla de proceso.

Me parece que te preocupa dejar huérfanos porque, por definición, cuando matas a un padre zombis, el propio zombi muere.

Para matar a tus huérfanos, utiliza kill -9, que es el SIGKILL equivalente.

aquí es un tutorial más en profundidad para matar cosas en Linux: http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/

0

No puede controlar eso por señal; solo su proceso principal puede controlar eso, llamando al waitpid() o configurando manejadores de señal para SIGCHLD. Consulte SIGCHLD y SA_NOCLDWAIT en la página del manual sigaction(2) para obtener más información.

Además, lo que sucede con los hilos secundarios depende de la versión del kernel de Linux. Con los hilos POSIX 2.6, matar el hilo principal debería hacer que los otros hilos salgan limpiamente. Con 2.4 LinuxThreads, cada subproceso es en realidad un proceso separado y SIGKILL no le da al subproceso raíz la oportunidad de decirle a los demás que se apaguen, mientras que SIGTERM sí lo hace.

Cuestiones relacionadas