Maison >développement back-end >Golang >Comment empêcher Ctrl C d'interrompre les processus enfants exec.Command ?

Comment empêcher Ctrl C d'interrompre les processus enfants exec.Command ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-15 02:36:10999parcourir

How to Prevent Ctrl C from Interrupting exec.Command Child Processes?

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 :

  1. 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,
    }
  2. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn