在 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中文网其他相关文章!