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
Libérer: 2024-12-15 02:36:10
original
996 Les gens l'ont consulté

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,
    }
    Copier après la connexion
  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()
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal