1. 程式人生 > >kill用法詳細解釋(特別是訊號量9的使用以及理解)

kill用法詳細解釋(特別是訊號量9的使用以及理解)

Linux kill命令

當需要中斷一個前臺程序的時候,通常是使用< Ctrl+c >組合鍵;但是對於一個後臺程序恐怕就不是一個組合鍵所能解決的了,這時就必須求助於kill命令。該命令可以終止後臺程序。至於終止後臺程序的原因很多,或許是該程序佔用的CPU時間過多;或許是該程序已經掛死。總之這種情況是經常發生的。Linux程序中的kill命令是通過向程序傳送指定的訊號來結束程序的。如果沒有指定傳送訊號,那麼預設值為TERM訊號。TERM訊號將終止所有不能捕獲該訊號的程序。至於那些可以捕獲該訊號的程序可能就需要使用kill(9)訊號了,該訊號是不能被捕捉的。

Linux kill命令很簡單,大致有以下兩種方式:
1.kill [-s 訊號 | -p ] [ -a ] 程序號 ...
2.kill -l [訊號]
◆-s 指定需要送出的訊號。既可以是訊號名也可以對應數字。
◆-p 指定kill命令只是顯示程序的pid,並不真正送出結束訊號。
◆-l 顯示訊號名稱列表,這也可以在/usr/include/linux/signal.h檔案中找到。

Linux kill命令使用
下面看看該命令的使用。
[例24] 在執行一條find指令時由於時間過長,決定終止該程序。
首先應該使用ps命令來檢視該程序對應的PID,鍵入ps,顯示如下:
PID TTY TIME COMMAND
285 1 00:00:00 -bash
287 3 00:00:00 -bash
289 5 00:00:00 /sbin/mingetty tty5
290 6 00:00:00 /sbin/mingetty tty6
312 3 00:00:00 telnet bbs3
341 4 00:00:00 /sbin/mingetty tty4
345 1 00:00:00 find / -name foxy.jpg
348 1 00:00:00 ps
可以看到該程序對應的PID是345,現在使用kill命令來終止該程序。鍵入:
# kill 345
再用ps命令檢視,就可以看到,find程序已經被殺掉了。
[例25] 殺掉程序11721
# ps PID TTY TIME COMMAND
11668 p1 00:00:00 -tcsh
11721 p1 00:00:00 cat
11737 p1 00:00:00 ps
# kill 11721
[1] Terminated cat
#

有時候可能會遇到這樣的情況,某個程序已經掛死或閒置,使用kill命令卻殺不掉。這時候就必須傳送訊號9,強行關閉此程序。當然這種“野蠻”的方法很可能會導致開啟的檔案出現錯誤或者資料丟失之類的錯誤。所以不到萬不得已不要使用強制結束的辦法。如果連訊號9都不響應,那恐怕就只有重新啟動計算機了。

控制多個程序命令Linux可使使用者同時執行多個程序,還允許使用者或系統管理員能控制正在執行的程序。