我有一個討厭的進程(在這個例子中,是一個原本應該在 iPhone Simulator 中運行的擱淺進程(現已退出)。
97442 ?? 0:00.00 (MyProcess)
我已經嘗試了我能想到的一切,包括
sudo kill -9 97442
sudo kill -HUP 97442
然而,就像烏鴉一樣……這個過程仍然存在。
在這種情況下,這意味著為了繼續工作,我必須重新啟動我的機器。
答案1
當一個進程保留在進程表中時,就需要殺死它家長過程。首先找到父行程PID:
ps -eo 'pid,ppid,comm' | grep 97442
然後就跑吧kill <pid>
,不管ppid
結果如何。 (首先給它一個徹底死去的機會。)
傳統的 Unix 設計保留進程資訊以供父母收割和清理,以防父進程想要運行getrusage(2)
以了解其子進程的資源使用情況,或者wait(2)
其退出狀態等。
當父母沒有收割他們的孩子時,孩子們仍然是殭屍——直到父進程被殺死,此時內核將重新將孩子們設置為init(8)
.init(8)
將要收割新重新養育的孩子。