Systemd
使用和不使用 systemctl 殺死 systemd 服務
像這樣殺死正在執行的守護程序 systemd 服務有什麼區別:
kill -SIGKILL 3645
和
systemctl -s kill -SIGKILL 3645
其中 3645 是 systemd 服務的 pid。使用第一種方法還有什麼缺點嗎?
首先,您的
systemctl
語法是錯誤的:systemctl kill
需要一個單元名稱,而不是 PID,並且-s
需要一個信號名稱。正如所寫,它不會做任何事情,只是給你一個錯誤資訊:Failed to parse signal string kill.
如果你解決了這個問題,它會告訴你:
Failed to kill unit 3645.service: Unit 3645.service not loaded.
正確的語法是:
systemctl kill -s SIGWHATEVER whatever.service
顯然,不同之處在於您可以基於 systemd 單元而不是 pid 向程序發送信號。因為一個單元可能執行多個程序,systemd 然後可以向該單元下執行的所有程序發送相同的信號,實際上,這是預設設置。該
--kill-who=
選項允許您在必要時更改此設置。不過,一般來說,養成向任何東西發送 SIGKILL 的習慣並不是一個好主意。您應該盡可能正常地停止您的服務,例如使用
systemctl stop whatever.service
.kill -9
SIGKILL 與您可能聽說過並被警告過的潛在破壞性相同。而且,如果您通過任何一種方法終止服務並且它被配置為自動重新啟動,它可能會這樣做。這可能是也可能不是您想要的,這取決於您嘗試發送終止信號的原因。