Linux 刪除殭屍 zombie process方法

1.檢查目前殭屍 zombie process

ps -ef | grep defunct | grep -v grep | wc -l

8 ==> 顯示有8個 zombie process
 
2.使用 top 顯示 process

top | head -2 
top - 13:37:42 up 12 days,  5:17, 35 users,  load average: 1.10, 1.13, 1.09
Tasks: 1015 total,   2 running, 1005 sleeping,   0 stopped,   8 zombie  ==> 顯示有8個 zombie process

3.獲得 zombie process

ps -ef | grep defunct | grep -v grep
523       1694  1692  0 Sep16 ?        00:00:00 [sh] 
howard    3182  3181  0 11:10 ?        00:00:00 [sh] 
ybkung    4814  4810  0 11:37 pts/50   00:00:00 [whoami] 
howard    5443  5441  0 13:08 ?        00:00:00 [sh] 
ttwang    8969  8968  0 Sep21 ?        00:00:00 [sh] 
523      13223 13221  0 Sep10 ?        00:00:00 [sh] 
523      32070 32068  0 Sep11 ?        00:00:00 [sh] 
yfw      32297 32296  0 09:13 ?        00:00:00 [sh] 

4.執行下面指令刪除大量zombie process

ps -ef | grep defunct | grep -v grep | awk '{print "kill -9 " $2,$3}'
kill -9 1694 1692
kill -9 4814 4810
kill -9 5443 5441
kill -9 6365 6359
kill -9 8969 8968
kill -9 13223 13221
kill -9 32070 32068
kill -9 32297 32296

5.再次檢查目前殭屍 zombie process

ps -ef | grep defunct | grep -v grep | wc -l

7 ==> 顯示有8個 zombie process
 
6.執行下面指令再次批次刪除zombie process

ps -ef | grep defunct | grep -v grep | awk '{print "kill -18 " $3}'
kill -18 1692
kill -18 4810
kill -18 5441
kill -18 6605
kill -18 8968
kill -18 13221
kill -18 32068
kill -18 32296

清除ZOMBIE(殭屍)process原理

kill -18 PPID

PPID是其父進程, 這個信號是告訴父進程, 該子進程已經死亡了, 請收回分配給他的資源.

使用killall 指令
killall 指令常用的參數有:
-e, --exact:在程式名稱完全比對成功時,才中止程式。如果程式的名稱超過 15 個字元,其餘的字元在系統中會被捨去,這時候在預設的狀況下,killall 會把所有符合前 15 個字元的程式都中止掉,如果加上 -e 參數的話,killall 指令就會跳過這種名稱過長的程式。
-I, --ignore-case:在比對程式名稱時,英文大小寫視為相同(ignore case)。
-i, --interactive:在中止程式之前,先以互動式的方式詢問。
-l, --list:列出所有的訊號(signal)名稱。
-r, --regexp:使用常規表示法(regular expression)指定程式名稱。
-s, --signal:指定送出的訊號(signal)。
-u, --user:只中止指定使用者所執行的程式。
-o, --older-than:指定程式的開始執行時間點,必須在此時間點之前。
-y, --younger-than:指定程式的開始執行時間點,必須在此時間點之後。
以下是一些 kill 指令的使用範例:
 
中止執行 xclock 這個程式:

killall xclock

終止 使用者 eric 所有程式

killall -u eric

ERC_8696

上一篇 Linux sed 指令的用法 sed 批次檔案搜尋並取代
下一篇 Linux terminal 常用快速鍵(熱鍵)