No puedes controlar eso por señal; solo su proceso principal puede controlar eso, llamando a waitpid()
o configurar controladores de señal para SIGCHLD
. Ver SIGCHLD
y SA_NOCLDWAIT
en el sigaction(2)
página de manual para más detalles.
Además, lo que sucede con los subprocesos secundarios depende de la versión del kernel de Linux. Con los subprocesos POSIX de 2.6, matar el subproceso principal debería hacer que los otros subprocesos salgan limpiamente. Con 2.4 LinuxThreads, cada hilo 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
lo hace.
Si elimina el proceso raíz (proceso principal), esto debería generar niños huérfanos, no niños zombis. Los niños huérfanos se crean cuando matas al padre de un proceso, y el kernel convierte a init en el padre de los huérfanos. Se supone que init debe esperar hasta que el huérfano muera, luego use esperar para limpiarlo.
Los niños zombis se crean cuando finaliza un proceso (no su padre) y su padre no toma su estado de salida de la tabla de procesos.
Me parece que te preocupa dejar huérfanos porque, por definición, cuando eliminas el proceso padre de un zombi, el niño zombi mismo muere.
Para matar a tus huérfanos, usa kill -9 , que es el SIGKILL equivalente.
Aquí hay un tutorial más detallado para matar cosas en Linux:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/