Impossible de détacher le processus enfant lorsque le processus principal est démarré à partir de Systemd
Lors de l'exécution d'un processus principal qui génère des processus enfants, il est souhaitable de faire en sorte que les processus enfants survivent même si le processus principal redémarre ou meurt. Ce comportement fonctionne comme prévu lors de l'exécution du processus principal à partir d'un terminal, comme démontré dans l'exemple fourni avec le programme exectest.
Cependant, lorsque le processus principal est démarré via Systemd à l'aide d'un fichier de service, les processus enfants le font ne survivent pas au-delà de la durée de vie du processus principal. Cela se produit parce que Systemd gère les processus dans un groupe de contrôle et, par défaut, il nettoie tous les processus enfants à la fin du processus parent.
Pour résoudre ce problème, le paramètre KillMode dans la définition du service Systemd peut être modifié. Par défaut, KillMode est défini sur control-group, mais le changer en process garantira que seul le processus principal est tué, permettant à ses processus enfants de continuer à s'exécuter.
Le fichier de service mis à jour inclurait la ligne suivante :
KillMode=process
Avec ce paramètre en place, les processus enfants d'exectest survivront même lorsque le processus principal est arrêté ou redémarré via Systemd.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!