長時間実行される子プロセスを生成するプログラムを実行する場合、メインプロセスの後でも子プロセスがアクティブなままであることを確認することが重要です。プロセスが再起動または終了します。これは、コマンド ラインを使用して、exec.Command オブジェクトの Setsid フラグを true に設定することで実現できます。これにより、子プロセスが親プロセスのセッションおよびプロセス グループから切り離され、独立して実行を継続できるようになります。
ただし、systemd 経由でメイン プロセスを起動する場合、サービス構成ファイルのデフォルトの KillMode 設定が干渉する可能性があります。切り離しのプロセス。デフォルトでは、systemd の KillMode は control-group に設定されています。これは、メイン プロセスが停止すると、ユニットのコントロール グループ内のすべてのプロセスが終了することを意味します。
この問題を解決し、子プロセスがメイン プロセスを存続できるようにするには終了するには、systemd サービス ファイルの KillMode 設定を変更する必要があります。
KillMode 設定では、/etc/systemd/system/exectest.service にある systemd サービス ファイルを編集し、[Service] セクション内に次の行を追加します。
KillMode=process
KillMode をプロセスに設定すると、メインのプロセス自体は、ユニットが停止されると強制終了されます。これにより、子プロセスは影響を受けずに独立して実行を続けることが保証されます。
変更を行った後、ファイルを保存し、次のコマンドを使用して systemd サービスを再起動します。
sudo systemctl daemon-reload sudo systemctl restart exectest
親プロセスの終了後も子プロセスが存続していることを確認するには、次のコマンドを使用します。手順:
以上がsystemd で親プロセスが終了しても子プロセスが確実に存続するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。