Détermination de l'origine du signal en Go : explorer des alternatives
En Go, capturer des signaux est possible, mais obtenir le PID du processus qui a déclenché le le signal n’est pas pris en charge nativement. C fournit un gestionnaire de signal qui transmet une structure indiquant le PID d'origine, mais Go ne dispose pas de cette fonctionnalité.
Tenter d'établir un gestionnaire de signal personnalisé en C peut être complexe et sujet aux erreurs. Envisagez des méthodes de communication alternatives pour la communication inter-processus.
Approches alternatives :
Si la détermination du PID d'origine est cruciale, envisagez les approches suivantes :
Exemple (en utilisant Sockets) :
Voici un exemple d'utilisation de sockets TCP pour communiquer les ID de processus entre les processus :
import ( "net" "os" "strconv" ) func main() { // Create a TCP listener ln, err := net.Listen("tcp", ":8080") if err != nil { os.Exit(1) } // Acceptor routine go func() { for { conn, err := ln.Accept() if err != nil { continue } // Receive PID from the client buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil || n == 0 { continue } pid, err := strconv.Atoi(string(buf[:n])) if err != nil { continue } // ... Do something with the received PID } }() // Query and send PID to the server conn, err := net.Dial("tcp", "localhost:8080") if err != nil { os.Exit(1) } // Send PID to the server pid := os.Getpid() conn.Write([]byte(strconv.Itoa(pid))) }
Cette approche permet aux processus d'échanger des informations PID de manière efficace et transparente.
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!