首頁 > 後端開發 > Golang > 如何確保子程序在 systemd 中的父進程終止後繼續存在?

如何確保子程序在 systemd 中的父進程終止後繼續存在?

Susan Sarandon
發布: 2024-12-25 08:24:10
原創
621 人瀏覽過

How to Ensure Child Processes Survive Parent Process Termination in systemd?

在Systemd 中分離子進程

執行產生長時間運行的子進程的程式時,確保子進程即使在主進程結束後仍保持活動狀態至關重要進程重新啟動或終止。使用命令列,這可以透過將 exec.Command 物件的 Setsid 標誌設為 true 來實現。這會將子進程與父進程的會話和進程組分離,使其繼續獨立運行。

但是,當透過 systemd 啟動主進程時,服務設定檔中的預設 KillMode 設定可能會幹擾脫離過程。預設情況下,systemd 的 KillMode 設定為 control-group,這表示當主進程停止時,單元控制群組內的所有進程都會終止。

解決此問題並允許子程序在主進程中生存終止時,需要修改 systemd 服務檔案中的 KillMode 設定。

修改Systemd 服務文件

要更改KillMode 設置,請編輯位於/etc/systemd/system/exectest.service 的systemd 服務文件,並在[Service] 部分中添加以下行:

KillMode=process
登入後複製

將KillMode 設定為進程可確保僅殺死主進程本身當裝置停止時。這可確保子進程不受影響並繼續獨立運作。

進行更改後,儲存檔案並使用以下命令重新啟動systemd 服務:

sudo systemctl daemon-reload
sudo systemctl restart exectest
登入後複製

驗證子進程的生存情況

要驗證子進程是否在父進程終止後繼續存在,請使用下列指令步驟:

  1. 使用ps -ef | 檢查正在執行的進程grep exectest:這應該顯示在 systemd 用戶下運行的主進程(exectest),並且子進程(exectest child)仍然處於活動狀態。
  2. 終止父行程:向主行程發送訊號(例如 sudo kill -INT ) 來終止它。
  3. 驗證子程序是否存活:重新執行 ps -ef | grep exectest 檢查子程序是否仍在執行。如果子進程一直處於活動狀態,則服務檔案修改成功。

以上是如何確保子程序在 systemd 中的父進程終止後繼續存在?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板