終止程式的工具 kill 、killall、pkill、xkill

tonykorn97發表於2006-11-07

一直用kill kill -9 下次要記得用killall 和 pkill。要把平時用幾行命令完成的事情用一行命令完成!


終止一個程式或終止一個正在執行的程式,一般是透過 kill 、killall、pkill、xkill 等進行。比如一個程式已經死掉,但又不能退出,這時就應該考慮應用這些工具。

另外應用的場合就是在伺服器管理中,在不涉及資料庫伺服器程式的父程式的停止執行,也可以用這些工具來終止。為什麼資料庫伺服器的父程式不能用這些工具殺死呢?原因很簡單,這些工具在強行終止資料庫伺服器時,會讓資料庫產生更多的檔案碎片,當碎片達到一定程度的時候,資料庫就有崩潰的危險。比如mysql伺服器最好是按其正常的程式關閉,而不是用pkill mysqld 或killall mysqld 這樣危險的動作;當然對於佔用資源過多的資料庫子程式,我們應該用kill 來殺掉。


3.1 kill

kill的應用是和ps 或pgrep 命令結合在一起使用的;

kill 的用法:

kill [訊號程式碼]   程式ID

注:訊號程式碼可以省略;我們常用的訊號程式碼是 -9 ,表示強制終止;

舉例:

[root@localhost ~]# ps auxf |grep httpd
root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 _ grep httpd
root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd
apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4837 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4838 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4839 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd
apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 _ /usr/sbin/httpd

我們檢視httpd 伺服器的程式;您也可以用pgrep -l httpd 來檢視;

我們看上面例子中的第二列,就是程式PID的列,其中4830是httpd伺服器的父程式,從4833-4840的程式都是它4830的子程式;如果我們殺掉父程式4830的話,其下的子程式也會跟著死掉;

[root@localhost ~]# kill 4840 注:殺掉4840這個程式;
[root@localhost ~]# ps -auxf |grep httpd 注:檢視一下會有什麼結果?是不是httpd伺服器仍在執行?
[root@localhost ~]# kill 4830 注:殺掉httpd的父程式;
[root@localhost ~]# ps -aux |grep httpd 注:檢視httpd的其它子程式是否存在,httpd伺服器是否仍在執行?

對於殭屍程式,可以用kill -9 來強制終止退出;

比如一個程式已經徹底死掉,如果kill 不加訊號強度是沒有辦法退出,最好的辦法就是加訊號強度 -9 ,後面要接殺父程式;比如;

[root@localhost ~]# ps aux |grep gaim
beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim
root 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim

[root@localhost ~]# pgrep -l gaim
5031 gaim
[root@localhost ~]# kill -9 5031


3.2 killall

killall 透過程式的名字,直接殺死所有程式,我們們簡單說一下就行了。


用法:killall 正在執行的程式名

killall 也和ps或pgrep 結合使用,比較方便;透過ps或pgrep 來檢視哪些程式在執行;

舉例:

[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim


3.3 pkill

pkill 和killall 應用方法差不多,也是直接殺死執行中的程式;如果您想殺掉單個程式,請用kill 來殺掉。

應用方法:

#pkill 正在執行的程式名

舉例:

[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# pkill gaim


3.4 xkill

xkill 是在桌面用的殺死圖形介面的程式。比如當firefox 出現崩潰不能退出時,點滑鼠就能殺死firefox 。當xkill執行時出來和個人腦骨的圖示,哪個圖形程式崩潰一點就OK了。如果您想終止xkill ,就按右鍵取消;

xkill 呼叫方法:

[root@localhost ~]# xkill

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章