ホームページ > バックエンド開発 > Golang > Go 親プロセスが終了したときに子プロセスを確実に強制終了するにはどうすればよいですか?

Go 親プロセスが終了したときに子プロセスを確実に強制終了するにはどうすればよいですか?

DDD
リリース: 2024-11-27 02:09:10
オリジナル
255 人が閲覧しました

How to Reliably Kill Child Processes When a Go Parent Process Exits?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート