3 回答

TA貢獻(xiàn)1725條經(jīng)驗 獲得超8個贊
解決方法是添加
KillMode=process
到服務(wù)區(qū)。默認(rèn)值是control-group
這意味著 systemd 清理任何子進(jìn)程。
KillMode= 指定如何終止該單元的進(jìn)程??刂平M、過程、混合、無之一。
如果設(shè)置為 control-group,則在 unit stop 時將殺死本單元 control group 中的所有剩余進(jìn)程(對于服務(wù):執(zhí)行 stop 命令后,如 ExecStop= 配置的那樣)。如果設(shè)置為 process,則只會殺死主進(jìn)程本身。如果設(shè)置為混合,則 SIGTERM 信號(見下文)被發(fā)送到主進(jìn)程,而隨后的 SIGKILL 信號(見下文)被發(fā)送到單元控制組的所有剩余進(jìn)程。如果設(shè)置為 none,則不會殺死任何進(jìn)程。在這種情況下,單元停止時只會執(zhí)行停止命令,否則不會殺死任何進(jìn)程。停止后還活著的進(jìn)程留在他們的控制組中,控制組在停止后繼續(xù)存在,除非它是空的。

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊
如果KillMode由于某種原因你不能(像我一樣)改變服務(wù)的,你可以試試這個at命令(見man)。
您可以安排您的命令提前 1 分鐘運行。看一個例子:
# this will remove all .tmp files from "/path/" in 1 minute ahead (this task will run once)
echo rm /path/*.tmp | at now + 1 minute

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊
據(jù)我所知,解決這個問題的唯一可行方法是使用不同的 cgroup 啟動子進(jìn)程。您可以使用 systemd-run 命令和 --slice 參數(shù)來做到這一點。
systemd-run --user --scope --slice=app-firefox firefox
更改 KillMode 還意味著如果您的主進(jìn)程崩潰,并且任何子進(jìn)程仍在運行,systemd 將不會重新啟動它。
- 3 回答
- 0 關(guān)注
- 185 瀏覽
添加回答
舉報