Maison > Article > développement back-end > Comment tuer de manière fiable les processus enfants lorsqu'un processus Go Parent se termine ?
Tuer les exécutables enfants dans les processus Go
Lors de l'exécution de plusieurs threads dans Go qui exécutent des exécutables séparés, assurer la fin de ces processus enfants à la fin la résiliation du processus Go parent devient cruciale. Cet article aborde ce problème en explorant les méthodes disponibles pour atteindre cet objectif.
Méthode 1 : Groupe de processus
Une approche consiste à démarrer le processus enfant dans le même processus groupe en tant que processus Go parent. Ce faisant, lorsque le processus parent reçoit un signal d'arrêt (par exemple, SIGKILL ou SIGINT), l'ensemble du groupe de processus, y compris l'exécutable enfant, est terminé.
Méthode 2 : attribut Pdeathsig
L'attribut Pdeathsig dans la fonction syscall.SetProcAttr vous permet de spécifier un signal qui être envoyé au processus enfant lorsque son processus parent se termine. En définissant cet attribut sur un signal de fin (par exemple, syscall.SIGTERM), le processus enfant recevra un signal de sortie lorsque le processus Go parent se terminera.
Gestion du signal
Bien que son efficacité ne soit pas garantie avec SIG_KILL, vous pouvez établir un gestionnaire de signaux pour les signaux courants tels que SIG_INT et SIG_TERM. Dans ce gestionnaire, vous pouvez terminer manuellement les processus enfants à l'aide de syscall.Kill ou cmd.Process.Kill.
Exemple de code :
L'exemple de code suivant illustre l'utilisation de Pdeathsig pour assurer la terminaison d'un processus enfant :
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
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!