Go で長時間実行プロセスを実行する必要があります。次の要件:
ルート権限でプログラムを実行しています。 exec.Command() と syscall.SysProcAttr を使用して解決策を試みましたが、SIGTERM/SIGKILL をプログラムに送信すると失敗し、基礎となるプロセスがクラッシュします。プログラムの制御とは別に、プロセスをデーモンとして実行したいと考えています。
github.com/bashicorp/go-reap などの外部ライブラリを使用することを強くお勧めします。問題を効果的に解決します。ただし、カスタム実装を希望する場合は、次のアプローチを検討できます。
プロセスの継承に関する親プロセスと子プロセス。すべてのプロセスには親が必要で、親が死亡すると、子は孤立して PID 1 (init) に採用されます。言い換えれば、子は、それを開始した最初のプロセスとは異なる親を持つことはできません。
親が終了した後もプロセスが実行し続けるようにするには、systemd や docker などの専用のプロセス マネージャーを使用することを検討してください。孤立したプロセスを削除し、継続的な実行を保証します。その他の考えられる解決策には、カスタム デーモンを作成するか、go-daemon のようなライブラリを使用して、親プログラムから独立してプロセスのライフサイクルを管理することが含まれます。
以上がGo で長時間実行プロセスを実行し、親プロセスから切り離す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。