當主進程從Systemd 啟動時無法分離子進程
運行生成子進程的主進程時,最好即使主進程重新啟動或死亡,子進程也能生存。從終端運行主進程時,此行為會按預期工作,如提供的 exectest 程式範例所示。
但是,當使用服務文件透過 Systemd 啟動主程序時,子程序會執行以下操作:不會超出主程序的生命週期。發生這種情況是因為 Systemd 管理控制組中的進程,並且預設情況下,它會在父進程終止時清除所有子進程。
要解決此問題,可以修改 Systemd 服務定義中的 KillMode 設定。預設情況下,KillMode 設定為 control-group,但將其變更為 process 將確保僅殺死主進程,從而允許其子進程繼續運行。
更新的服務檔案將包含以下行:
KillMode=process
透過此設置,即使主進程被殺死或透過 Systemd 重新啟動,exectest 的子進程也將存活。
以上是Systemd管理的父行程退出後如何保持子行程運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!