在Go 中確定訊號來源:探索替代方案
在Go 中,捕捉訊號是可能的,但需要取得觸發訊號的進程的PID訊號本身不支援。 C 提供了一個訊號處理程序,它傳遞一個指示原始 PID 的結構,但 Go 缺乏此功能。
嘗試在 C 中建立自訂訊號處理程序可能很複雜且容易出錯。考慮用於進程間通訊的替代通訊方法。
替代方法:
如果確定原始 PID 至關重要,請考慮以下方法:
範例(使用套接字):
這是使用TCP 套接字在進程之間傳遞進程ID 的範例:
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))) }
這種方法允許進程有效且無縫地交換PID 資訊。
以上是在 Go 中如何決定訊號的原始進程 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!