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

Tags: , , , ,