No.
El proceso principal maneja la muerte de sus hijos, en forma normal.
Este es el mundo POSIX. Si el proceso A ha bifurcado B y el proceso B ha bifurcado C, D y E; entonces el proceso B es lo que ve el SIGCHLD
y wait()
estado de la terminación de C, D y E. El proceso A no sabe lo que sucede con C, D y E, y esto es independiente de systemd.
Para que A sepa que C, D y E terminan, tienen que suceder dos cosas.
- A tiene que registrarse como "subrecolector". systemd hace esto, al igual que otros administradores de servicios, incluidos upstart y nosh
service-manager
. - B tiene que
exit()
. Los servicios que tonta, errónea y vanamente intentan "demonizarse" a sí mismos hacen esto.
(Uno puede ser inteligente con kevent()
en los BSD. Pero esta es una pregunta de Linux).
systemd
tiene el concepto de un proceso principal. En la documentación de systemd, esto se denomina "proceso de servicio principal" o simplemente "proceso principal".
El ejemplo 4 en la documentación de systemd.service describe que el proceso principal se calcula cuando Type=forking
.
La documentación para Restart=
en los documentos de systemd.service se describen las diferentes posibilidades cuando se inicia un servicio en relación con el proceso principal.
Aquí está el texto clave del "ejemplo 4" vinculado arriba:
systemd considerará que el servicio está en proceso de inicialización mientras el programa original aún se está ejecutando. Una vez que sale con éxito y queda al menos un proceso (andRemainAfterExit=no), el servicio se considera iniciado.
A menudo, un demonio tradicional solo consta de un proceso. Por lo tanto, si solo queda un proceso después de que finaliza el proceso original, systemd considerará ese proceso como el proceso principal del servicio. En ese caso, la variable $MAINPID estará disponible en ExecReload=,ExecStop=, etc.
En caso de que quede más de un proceso, systemd no podrá determinar el proceso principal, por lo que no asumirá que existe uno. En ese caso, $MAINPID no se expandirá a nada. Sin embargo, si el proceso decide escribir un archivo PID tradicional, systemd podrá leer el PID principal desde allí. Establezca PIDFile=en consecuencia.