Go で子実行可能ファイルを確実に終了する
Go では、プログラムが複数のスレッドを同時に実行し、それぞれが呼び出している状況に遭遇することがあります。個別の実行可能ファイル。このような場合、メインの Go プロセスが終了した場合、実行中の実行可能ファイルも停止する方法を見つけることが重要です。この記事では、Go でこれを実現する方法について説明します。
子実行可能ファイルを確実に終了する従来の方法は、子実行可能ファイルをメインの Go プロセスと同じプロセス グループに割り当ててから、プロセス グループ全体を強制終了することです。あるいは、syscall.SetProcAttr で Pdeathsig フィールドを指定して、メイン プロセスの終了時に子プロセスに送信されるシグナルを制御することもできます。
ただし、シグナル ハンドラーで SIG_INT や SIG_TERM などのシグナルをキャッチすることに注意することが重要です。また、SIG_KILL はキャプチャできないため、プログラムを終了する前に子プロセスを強制終了することは必ずしも信頼できるとは限りません。したがって、プロセス グループを強制終了するか、Pdeadsig を設定するアプローチが一般に好まれます。
説明のために、次のコード スニペットを考えてみましょう。
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
この例では、子実行可能ファイルを次のように割り当てます。 SysProcAttr を設定することで、メインの Go プロセスと同じプロセス グループを作成します。 Go プロセスが終了すると、指定されたシグナル (この場合は SIGTERM) が子実行可能ファイルに送信され、子実行可能ファイルが終了します。
以上がGo プログラムから子実行可能ファイルを確実に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。