Process

為什麼我不應該使用 ‘kill -9’ / SIGKILL

  • February 4, 2021

發布這個問題是因為我很驚訝沒有直接回答它;抱歉,如果這是重複的-我確實看過!

我聽說過kill -9或者kill -SIGKILL不好,但我不明白為什麼。如果我不應該kill -9怎麼做才能殺死一個程序?

SIGKILL從正在執行的程序中拉出地毯,立即終止它。對於非常簡單的程序,這很好;然而,在實踐中,“簡單”的程序很少。

在幕後,即使是看似微不足道的程序也會在終止前完成各種事務性工作(想想finallyJava 和其他程式語言中的塊),例如關閉資源句柄、刪除臨時文件和刷新數據記憶體到磁碟。您無法預測程序何時會執行此類操作。

如果你很幸運,發送 a 就不會注意到任何問題SIGKILL,但你不可能永遠幸運,而且你可能不知道有什麼問題,直到為時已晚才能恢復失去的內容。

您幾乎永遠不需要發送SIGKILL,並且您應該確保在這樣做之前已經用盡了您的選擇。在許多情況下,重新啟動(最終會將SIGKILLs 發送到行為不端的程序)比手動發送更安全SIGKILL。我可能一方面可以數出我需要發送的次數SIGKILL(並且可能是我自己製作的)。

一般來說,您可以使用Ctrl+ C(發送前台程序 a SIGINT)或SIGTERM(如“終止”)來指示程序停止正在執行的操作並退出。

一些進一步的閱讀:

引用自:https://unix.stackexchange.com/questions/281439