No.
Il processo principale gestisce la morte dei suoi figli, in modo normale.
Questo è il mondo POSIX. Se il processo A ha biforcato B e il processo B ha biforcato C, D ed E; quindi il processo B è ciò che vede SIGCHLD
e wait()
stato dalla cessazione di C, D ed E. Il processo A non è a conoscenza di ciò che accade a C, D ed E, e questo è indipendente da systemd.
Affinché A sia consapevole della chiusura di C, D ed E, devono accadere due cose.
- A deve registrarsi come "subreaper". systemd lo fa, così come vari altri gestori di servizi inclusi upstart e nosh
service-manager
. - B deve
exit()
. I servizi che stupidamente, erroneamente e invano cercano di "dæmonizzare" se stessi fanno questo.
(Si può diventare furbi con kevent()
sui BSD. Ma questa è una domanda su Linux.)
systemd
ha il concetto di processo principale. Nella documentazione di systemd questo è indicato come "processo di servizio principale" o semplicemente "processo principale".
L'esempio 4 nella documentazione di systemd.service descrive come il processo principale viene calcolato quando Type=forking
.
La documentazione per Restart=
nei documenti systemd.service descrivono le diverse possibilità per quando un servizio viene avviato in relazione al processo principale.
Ecco il testo chiave dell'"esempio 4" collegato sopra:
systemd considererà il servizio in fase di inizializzazione mentre il programma originale è ancora in esecuzione. Una volta che itesce con successo e rimane almeno un processo (andRemainAfterExit=no), il servizio è considerato avviato.
Spesso, un demone tradizionale è costituito da un solo processo. Pertanto, se rimane un solo processo dopo il termine del processo originale, systemd considererà tale processo il processo principale del servizio. In tal caso, la variabile $MAINPID sarà disponibile in ExecReload=,ExecStop=, ecc.
Nel caso in cui rimanga più di un processo, systemd non sarà in grado di determinare il processo principale, quindi non presumerà che ce ne sia uno. In tal caso, $MAINPID non si espanderà in nulla. Tuttavia, se il processo decide di scrivere un file PID tradizionale, systemd sarà in grado di leggere il PID principale da lì. Si prega di impostare PIDFile=di conseguenza.