Golang シグナルモニタリング
Go では、外部プログラムを実行する方法がいくつかあります。一般的なアプローチの 1 つは、新しいプロセスを起動できる syscall.Exec 関数を利用することです。ただし、このプロセス内のシグナルを管理するには、慎重な実装が必要です。
シグナル監視に Signal.Notify を使用する
外部で実行されるプロセスによって生成されたシグナルを監視するには、次のような効果的な方法があります。 signal.Notify 機能を使用します。この関数を使用すると、チャネル経由で信号を受信できます。
sigc := make(chan os.Signal, 1) signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
このコードは、対象の信号を受信するチャネルを設定します。シグナルを受信すると、チャネルのブロックが解除され、それに応じてシグナルを処理できます。
syscall.Exec を使用してプロセスを起動する
syscall.Exec を使用して goroutine を実行するには、次のコード スニペットを使用できます。
func launchCmd(path string, args []string) { err := syscall.Exec(path, args, os.Environ()) if err != nil { panic(err) } }
This関数は実行可能ファイルとその引数へのパスを取得し、新しい goroutine でプロセスを開始します。
syscall.Kill または Process.Signal 経由でシグナルを送信
プロセスが完了するとが起動されたら、syscall.Kill または Process.Signal を使用してシグナルを送信できます。それ:
syscall.Kill(pid, syscall.SIGTERM)
または、Process オブジェクトがある場合は、以下を使用できます:
process.Signal(syscall.SIGTERM)
結論
次の戦略に従ってくださいこの記事で概説したように、Go の外部で実行されるプロセスによって発行されるシグナルを効果的に監視できます。 signal.Notify を利用してシグナルを受信し、アプリケーション内で管理します。
以上がGo で外部で実行されたプロセスからのシグナルを監視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。