L'éditeur php Yuzai vous présentera comment tuer le processus enfant lors de la fin du processus principal en langage Go. En développement, nous rencontrons souvent des situations dans lesquelles nous devons exécuter plusieurs processus enfants en même temps. Cependant, lorsque le processus principal se termine, si le processus enfant ne se termine pas correctement, des fuites de ressources ou d'autres problèmes peuvent en résulter. Par conséquent, il est très important de maîtriser comment tuer correctement le processus enfant lors de la fin du processus principal en langage Go. Dans l’article suivant, nous présenterons plusieurs méthodes courantes pour atteindre cet objectif et discuterons de leurs avantages et inconvénients.
Je souhaite mettre fin au processus enfant lorsque le processus principal se termine.
J'utilise exec.Command() pour exécuter le processus enfant
Mais le processus principal peut se terminer avec une erreur inattendue, je veux donc m'assurer que le processus enfant est également terminé.
Comment archiver en langage Go ?
Vous souhaiterez peut-être utiliser commandcontext
à la place et annuler le contexte dans main lorsque le processus se termine. Voici deux exemples : le premier est une simple démonstration de la fin d'un processus après un court délai d'attente, et le second est la fin d'un processus enfant lorsque le processus capte un signal de fin externe du système d'exploitation :
package main import ( "context" "os/exec" "time" ) func main() { // terminate the command based on time.Duration ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) defer cancel() if err := exec.CommandContext(ctx, "sleep", "5").Run(); err != nil { // This will fail after 100 milliseconds. The 5 second sleep // will be interrupted. } // or use os signals to cancel the context ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() }
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!