Gestion des interruptions Ctrl C dans exec.Command
Lors de l'exécution de processus externes à l'aide de exec.Command, il est crucial de considérer comment les interruptions, telles que Ctrl C, sont gérés. Par défaut, appuyer sur Ctrl C interrompt l'ensemble du groupe de processus, y compris les processus enfants. Ce comportement peut être problématique si vous souhaitez éviter l'interruption de processus spécifiques.
Pour résoudre ce problème et empêcher Ctrl C de perturber les processus enfants, suivez ces étapes :
Définir le groupe de processus : Avant d'exécuter le processus enfant, utilisez le champ SysProcAttr pour configurer le processus groupe.
cmd := exec.Command("sleep", "60") cmd.SysProcAttr = &syscall.SysProcAttr{ Setpgid: true, }
Gestion du signal : Dans le processus parent, gérez le signal Ctrl C pour l'empêcher de se propager au groupe de processus.
interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) go func() { <-interrupt log.Println("Ctrl+C received") // Perform any necessary cleanup or handling for Ctrl+C }() cmd.Run()
En séparant le groupe de processus du processus enfant et en gérant le signal d'interruption, vous pouvez empêcher Ctrl C de perturber l'exécution du processus enfant tout en permettant au processus parent de gérer l'interruption comme souhaité.
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!