Go プロセスの子実行可能ファイルの強制終了
個別の実行可能ファイルを実行する複数のスレッドを Go で実行する場合、これらの子プロセスは確実に終了します。親 Go プロセスの終了が重要になります。この記事では、この目標を達成するために利用可能な方法を検討することで、この問題に対処します。
方法 1: プロセス グループ
1 つの方法は、同じプロセス内で子プロセスを開始することです。グループを親 Go プロセスとして扱います。これにより、親プロセスが kill シグナル (SIGKILL や SIGINT など) を受信すると、子実行可能ファイルを含むプロセス グループ全体が終了します。
方法 2: Pdeathsig 属性
syscall.SetProcAttr 関数内の Pdeathsig 属性を使用すると、次のことが可能になります。親プロセスの終了時に子プロセスに送信されるシグナルを指定します。この属性を終了シグナル (syscall.SIGTERM など) に設定すると、親 Go プロセスが終了したときに子プロセスに終了するよう通知されます。
シグナル処理
SIG_KILL の有効性は保証されていませんが、SIG_INT や SIG_INT などの一般的なシグナルのシグナル ハンドラーを確立できます。 SIG_TERM。このハンドラー内では、syscall.Kill または cmd.Process.Kill を使用して子プロセスを手動で終了できます。
コード例:
次のコード サンプルは、その使用方法を示しています。 Pdeathsig を使用して子プロセスを確実に終了します:
cmd := exec.Command("./long-process") cmd.SysProcAttr = &syscall.SysProcAttr{ Pdeathsig: syscall.SIGTERM, }
以上がGo 親プロセスが終了したときに子プロセスを確実に強制終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。