Maison > développement back-end > Golang > Comment puis-je détecter et gérer les signaux d'un processus lancé dans Go ?

Comment puis-je détecter et gérer les signaux d'un processus lancé dans Go ?

Barbara Streisand
Libérer: 2024-12-29 15:21:16
original
531 Les gens l'ont consulté

How Can I Catch and Handle Signals from a Launched Process in Go?

Capturer des signaux dans Golang

Dans certains scénarios, vous devrez peut-être implémenter un wrapper de processus dans Golang qui surveille et capture les signaux générés par un processus lancé. Le wrapper de processus doit lancer le processus et gérer des signaux tels que SIGKILL et SIGTERM.

Lancement du processus

Pour lancer le processus, vous pouvez utiliser la fonction syscall.Exec . Cette fonction permet d'exécuter une commande et de rediriger ses flux d'entrée et de sortie. Voici un exemple :

func launchCmd(path string, args []string) {
  err := syscall.Exec(path, args, os.Environ())
  if err != nil {
    panic(err)
  }
}
Copier après la connexion

Capturer des signaux

Dans Go, vous pouvez utiliser le package de signaux pour capturer les signaux envoyés à votre processus. La fonction signal.Notify vous permet d'enregistrer un canal qui recevra des notifications pour les signaux spécifiés. Par exemple :

sigc := make(chan os.Signal, 1)
signal.Notify(sigc,
    syscall.SIGHUP,
    syscall.SIGINT,
    syscall.SIGTERM,
    syscall.SIGQUIT)
go func() {
    s := <-sigc
    // ... do something ...
}()
Copier après la connexion

Dans ce code, sigc est un canal qui recevra les signaux des types de signaux spécifiés. Vous pouvez utiliser une instruction select pour écouter les signaux sur ce canal et effectuer les actions appropriées.

Notes supplémentaires

  • Vous pouvez obtenir l'ID du processus (PID ) du processus lancé à l'aide de la méthode Process.Pid.
  • Pour envoyer un signal au processus, vous pouvez utiliser le syscall.Kill ou Process.Signal fonctions.
  • Les signaux que vous pouvez capter dépendent du système d'exploitation de votre machine hôte et des autorisations de votre processus.
  • Les packages os et os/exec fournissent également des méthodes pour démarrer des processus, mais ils peuvent ne pas fournir le même niveau de gestion du signal que le package syscall.

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