Go:信号源检索
在 Go 中,捕获信号是可能的,但确定触发信号的 PID 可能具有挑战性。
信号的限制处理
Go 在内部管理信号处理程序,没有官方的方法来访问信号发起者的 PID。如提供的示例中观察到的,返回的信号信息不包含此数据。
替代方法
使用替代方法进行通信,例如管道或信号量,可能更适合信号源确定至关重要的情况。
复杂的解决方案C
虽然没有官方支持,但可以在 C 中设置可以捕获 PID 的自定义信号处理程序。然而,这种方法很复杂,并且存在潜在的风险。
下面是一个基于 Ian 在 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) } }
这个示例使用 C 的 sigaction 来建立一个自定义信号处理程序,打印发送者的 PID。
以上是Go中如何确定信号发起者的PID?的详细内容。更多信息请关注PHP中文网其他相关文章!