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中文網其他相關文章!