Tengo los siguientes procesos.
Proceso para padres - Proceso infantil - Proceso infantil - Proceso infantil
¿Cómo puedo matar solo el proceso padre? Quiero que los procesos infantiles no sean asesinados. Si trato de matar el proceso padre, los niños recibirán SIGHUP y serán asesinados.
Respuestas:
En términos generales, cuando un proceso se vuelve huérfano (es decir, su padre muere), es adoptado por init.
La situación especial que describe probablemente se aplica a un proceso interactivo cuando se cierra su terminal de control (de Wikipedia ):
Para evitar esto, los procesos secundarios deben bloquear SIGHUP, por lo que en la mayoría de los casos necesita la cooperación del proceso primario.
Si el proceso padre es un shell (
bash
,csh
y similares) y desea que los comandos se ejecutan no termina cuando termina de bash, se puede prefijar con cualquier comandonohup
(deinfo coreutils "nohup invocation"
):En este ejemplo:
find
no se matará cuando el shell termine y cierre el terminal de control/dev/ttys000
.Si un script de shell debe bloquear SIGHUP, use el incorporado
trap
, como se explica aquí parabash
.fuente