當產生長時間運行的子進程時,確保它們在主進程的生命週期之外生存至關重要,特別是當由systemd 管理時。在某些情況下,子程序可能會意外終止,從而導致關鍵後台任務未處理。
嘗試使用go 程式語言建立啟動子進程的主進程時遇到以下問題:
從終端執行此程式時,即使主進程停止或終止(Ctrl Z 和kill -INT 7914),子程序仍然存在。但是,當主程序作為 systemd 服務啟動時,子進程也會突然終止。
要解決此問題,請修改systemd 服務檔案(/etc/systemd/system/exectest.service),新增以下行:
此設定指示systemd 僅終止主進程,允許子進程繼續運作。預設情況下,systemd 使用控制組模式,該模式會殺死與主程序在同一控制組內的所有程序。
更新後的 systemd 服務文件:
經過此修改,子進程將在主進程終止後繼續存在,並保證後台任務的穩定性和連續性。
以上是如何防止 systemd 在父進程終止時殺死子進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!