ホームページ > バックエンド開発 > Golang > systemd で親プロセスが終了しても子プロセスが確実に存続するようにするにはどうすればよいですか?

systemd で親プロセスが終了しても子プロセスが確実に存続するようにするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-25 08:24:10
オリジナル
624 人が閲覧しました

How to Ensure Child Processes Survive Parent Process Termination in systemd?

Systemd での子プロセスの切り離し

長時間実行される子プロセスを生成するプログラムを実行する場合、メインプロセスの後でも子プロセスがアクティブなままであることを確認することが重要です。プロセスが再起動または終了します。これは、コマンド ラインを使用して、exec.Command オブジェクトの Setsid フラグを true に設定することで実現できます。これにより、子プロセスが親プロセスのセッションおよびプロセス グループから切り離され、独立して実行を継続できるようになります。

ただし、systemd 経由でメイン プロセスを起動する場合、サービス構成ファイルのデフォルトの KillMode 設定が干渉する可能性があります。切り離しのプロセス。デフォルトでは、systemd の KillMode は control-group に設定されています。これは、メイン プロセスが停止すると、ユニットのコントロール グループ内のすべてのプロセスが終了することを意味します。

この問題を解決し、子プロセスがメイン プロセスを存続できるようにするには終了するには、systemd サービス ファイルの KillMode 設定を変更する必要があります。

Systemd サービス ファイルの変更

KillMode 設定では、/etc/systemd/system/exectest.service にある systemd サービス ファイルを編集し、[Service] セクション内に次の行を追加します。

KillMode=process
ログイン後にコピー

KillMode をプロセスに設定すると、メインのプロセス自体は、ユニットが停止されると強制終了されます。これにより、子プロセスは影響を受けずに独立して実行を続けることが保証されます。

変更を行った後、ファイルを保存し、次のコマンドを使用して systemd サービスを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart exectest
ログイン後にコピー

子プロセスの生存の確認

親プロセスの終了後も子プロセスが存続していることを確認するには、次のコマンドを使用します。手順:

  1. ps -ef | を使用して実行中のプロセスを確認します。 grep exectest: これにより、systemd ユーザーの下で実行されているメイン プロセス (exectest) と、まだアクティブな子プロセス (exectest child) が表示されます。
  2. 親プロセスを強制終了: メイン プロセス (例: sudo) にシグナルを送信します。 kill -INT ) を実行して終了します。
  3. 子プロセスの生存を確認します。 ps -ef | を再実行します。 grep exectest を使用して、子プロセスがまだ実行中かどうかを確認します。子プロセスがアクティブなままであれば、サービス ファイルへの変更は成功しています。

以上がsystemd で親プロセスが終了しても子プロセスが確実に存続するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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