GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo hacer que el proceso hijo muera después de que el padre salga?

El niño puede pedirle al kernel que entregue SIGHUP (u otra señal) cuando el padre muere especificando la opción PR_SET_PDEATHSIG en prctl() llamada al sistema como esta:

prctl(PR_SET_PDEATHSIG, SIGHUP);

Ver man 2 prctl para más detalles.

Editar:Esto es solo para Linux


He logrado esto en el pasado ejecutando el código "original" en el "hijo" y el código "generado" en el "padre" (es decir:inviertes el sentido habitual de la prueba después de fork() ). Luego atrapa SIGCHLD en el código "generado"...

Puede que no sea posible en tu caso, pero lindo cuando funciona.


Estoy tratando de resolver el mismo problema, y ​​dado que mi programa debe ejecutarse en OS X, la solución solo para Linux no funcionó para mí.

Llegué a la misma conclusión que las otras personas en esta página:no hay una forma compatible con POSIX de notificar a un niño cuando muere un padre. Así que hice la siguiente mejor cosa:tener la encuesta infantil.

Cuando un proceso padre muere (por cualquier motivo), el proceso padre del hijo se convierte en el proceso 1. Si el hijo simplemente sondea periódicamente, puede verificar si su padre es 1. Si es así, el hijo debe salir.

Esto no es muy bueno, pero funciona, y es más fácil que las soluciones de sondeo TCP socket/lockfile sugeridas en otras partes de esta página.


Linux
  1. ¿Cómo matar un proceso cuyo padre es Init?

  2. ¿Cómo encontrar todos los procesos secundarios?

  3. ¿Cómo configuro el directorio de trabajo del proceso principal?

  4. ¿Cómo rastrear el proceso secundario usando strace?

  5. El proceso hijo recibe SIGINT del padre

Cómo mostrar PPID en Linux

Cómo matar el proceso zombie

Cómo obtener un proceso secundario del proceso principal

¿Cómo bifurco un proceso que no muere cuando sale el shell?

¿Cómo maneja copy-on-write en fork() múltiples bifurcaciones?

Cómo matar un proceso <difunto> con el padre 1