Maison >développement back-end >Golang >Comment puis-je déterminer le PID de l'émetteur d'un signal dans Go ?

Comment puis-je déterminer le PID de l'émetteur d'un signal dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-10 00:44:10620parcourir

How Can I Determine the PID of a Signal's Originator in Go?

Go : récupération de l'origine du signal

Dans Go, capturer des signaux est possible, mais déterminer le PID qui a déclenché un signal peut être difficile.

Limitations de la gestion des signaux

Go gère les gestionnaires de signaux en interne, et il n’existe aucun moyen officiel d’accéder au PID de l’expéditeur du signal. Les informations du signal renvoyées, comme observé dans l'exemple fourni, n'incluent pas ces données.

Approches alternatives

Utilisation d'une méthode alternative de communication, telle que des tuyaux ou des sémaphores , peut être plus adapté dans les cas où la détermination de l'origine du signal est cruciale.

Solution complexe de C

Bien qu'il ne soit pas officiellement pris en charge, il est possible de configurer un gestionnaire de signal personnalisé en C qui peut capturer le PID. Cependant, cette approche est complexe et présente des risques potentiels.

Voici un exemple basé sur une solution proposée par Ian du numéro GitHub 7227 :

package main

import (
    "C"
    "os"
    "syscall"
    "time"
)

func main() {
    C.test()
    pid := os.Getpid()
    for {
        syscall.Kill(pid, syscall.SIGUSR1)
        time.Sleep(time.Second)
    }
}

Cet exemple utilise la sigaction de C pour établir un gestionnaire de signal personnalisé, qui imprime le PID de l'expéditeur.

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