Bestimmen des Signalursprungs in Go: Erkunden von Alternativen
In Go ist das Erfassen von Signalen möglich, aber das Erhalten der PID des Prozesses, der das ausgelöst hat Das Signal wird nicht nativ unterstützt. C bietet einen Signalhandler, der eine Struktur übergibt, die die ursprüngliche PID angibt, aber Go fehlt diese Funktion.
Der Versuch, einen benutzerdefinierten Signalhandler in C einzurichten, kann komplex und fehleranfällig sein. Erwägen Sie alternative Kommunikationsmethoden für die Kommunikation zwischen Prozessen.
Alternative Ansätze:
Wenn die Bestimmung der Ursprungs-PID von entscheidender Bedeutung ist, ziehen Sie die folgenden Ansätze in Betracht:
Beispiel (mit Sockets):
Hier ist ein Beispiel für die Verwendung von TCP-Sockets zur Kommunikation von Prozess-IDs zwischen Prozessen:
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))) }
Dieser Ansatz ermöglicht es Prozessen, PID-Informationen effektiv und nahtlos auszutauschen.
Das obige ist der detaillierte Inhalt vonWie kann ich die Ursprungsprozess-ID eines Signals in Go ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!