Go: 信号原点の取得
Go では信号をキャプチャすることは可能ですが、信号をトリガーした PID を特定するのは困難な場合があります。
信号の制限Handling
Go はシグナル ハンドラーを内部で管理しており、シグナル発信者の PID にアクセスする正式な方法はありません。提供された例で見られるように、返された信号情報にはこのデータは含まれません。
代替アプローチ
パイプやセマフォなどの代替通信方法の使用、信号発信元の決定が重要な場合には、より適している可能性があります。
からの複雑なソリューションC
公式にはサポートされていませんが、PID をキャプチャできるカスタム シグナル ハンドラーを C でセットアップすることができます。ただし、このアプローチは複雑で、潜在的なリスクをもたらします。
これは、GitHub issue 7227 で Ian によって提案されたソリューションに基づく例です。
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 中国語 Web サイトの他の関連記事を参照してください。