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