Estoy intentando emular correctamente el manejo de señales POSIX y el control de trabajos parami sistema operativo mascota, pero no tengo claro qué debería suceder con una sesión después de que el líder de la sesión salga.
No puedo encontrar documentación relacionada con lo que sucede con la sesión y su proceso si, por ejemplo, un niño mata al líder de la sesión mientras se ejecutan varios procesos en segundo plano y un proceso en primer plano diferente.
Mis pruebas muestran que todos los procesos de la sesión se cancelan, pero ¿cómo?
¿Reciben una señal específica?
¿Este caso está especificado en el estándar POSIX? Y si es así, ¿puede proporcionar algunas referencias?
Respuesta1
No eres el único que está desconcertado por las sesiones POSIX; Lennart Poettering (el de systemd
la fama)también está desconcertado.
Por lo que cualquiera puede decir, cuando un líder de sesión muere, init
hereda la sesión huérfana y
Todos los procesos miembros de la sesión en el grupo de procesos de primer plano (si los hay) reciben un SIGHUP.
Los procesos miembros de la sesión que no están en el grupo de primer plano no reciben ninguna señal.
Ver también:
- notas.shichao.io/apue/ch9
- Capítulo 10 "Procesos" en El núcleo de Linuxpor Andries Brouwer (2003).
Si el terminal desaparece debido a la interrupción del módem y la línea no era local, se envía un SIGHUP al líder de la sesión. [...] Cuando el líder de la sesión muere, se envía un SIGHUP a todos los procesos en el grupo de procesos de primer plano. [...] Por lo tanto, si la terminal desaparece y el líder de la sesión es un shell de control de trabajo, entonces puede manejar cosas para sus descendientes, por ejemplo, enviándoles nuevamente un SIGHUP. Si, por otro lado, el líder de la sesión es un proceso inocente que no capta SIGHUP, morirá y todos los procesos en primer plano recibirán un SIGHUP.
andries brower,El núcleo de Linux, artículo 10.3 "Sesiones".