執行產生長時間運行的子進程的程式時,確保子進程即使在主進程結束後仍保持活動狀態至關重要進程重新啟動或終止。使用命令列,這可以透過將 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中文網其他相關文章!