ホームページ >バックエンド開発 >Golang >Go でシグナルの発信元の PID を確認するにはどうすればよいですか?

Go でシグナルの発信元の PID を確認するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-10 00:44:10616ブラウズ

How Can I Determine the PID of a Signal's Originator in Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。