當需要中斷乙個前台程序的時候,通常是使用< ctrl+c >組合鍵;但是對於乙個後台程序恐怕就不是乙個組合鍵所能解決的了,這時就必須求助於kill命令。該命令可以終止後台程序。至於終止後台程序的原因很多,或許是該程序占用的cpu時間過多;或許是該程序已經掛死。總之這種情況是經常發生的。
kill命令是通過向程序傳送指定的訊號來結束程序的。如果沒有指定傳送訊號,那麼預設值為term訊號。term訊號將終止所有不能捕獲該訊號的程序。至於那些可以捕獲該訊號的程序可能就需要使用kill(9)訊號了,該訊號是不能**捉的。
kill命令的語法格式很簡單,大致有以下兩種方式:
kill [-s 訊號 | -p ] [ -a ] 程序號 ...
kill -l [訊號]
-s 指定需要送出的訊號。既可以是訊號名也可以對應數字。
-p 指定kill命令只是顯示程序的pid,並不真正送出結束訊號。
-l 顯示訊號名稱列表,這也可以在/usr/include/linux/signal.h檔案中找到。
kill命令的使用
下面看看該命令的使用。
[例24] 在執行一條find指令時由於時間過長,決定終止該程序。
首先應該使用ps命令來檢視該程序對應的pid,鍵入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可使使用者同時執行多個程序,還允許使用者或系統管理員能控制正在執行的程序。
nohup命令
理論上,我們一般退出linux系統時,會把所有的程式全部結束掉,包括那些後台程式。但有時候,例如您正在編輯乙個很長的程式,但是您下班或 是有事需要先退出系統,這時您又不希望系統把您編輯那麼久的程式結束掉,希望退出系統時,程式還能繼續執行。這時,我們就可以使用nohup命令使程序在使用者退出後仍繼續執行。
一般這些程序我們都是讓它在後台執行,結果則會寫到使用者自己的目錄下的nohup.out這個檔案裡(也可以使用輸出重定向,讓它輸出到乙個特定的檔案)。
[例26] $ nohup sort sales.dat &
這條命令告訴sort命令忽略使用者已退出系統,它應該一直執行,直到程序完成。利用這種方法,可以啟動乙個要執行幾天甚至幾周的程序,而且在它執行時,使用者不需要去登入。
nohup命令把一條命令的所有輸出和錯誤資訊送到nohup.out檔案中。若將輸出重定向,則只有錯誤資訊放在nohup.out檔案中。
renice命令
renice命令允許使用者修改乙個正在執行程序的優先權。 利用renice命令可以在命令執行時調整其優先權。其格式如下:
$ renice -number pid
其中,引數number與nice命令的number意義相同。
注:(1) 使用者只能對自己所有的程序使用renice命令。
(2) root使用者可以在任何程序上使用renice命令。
(3) 只有root使用者才能提高程序的優先權
kill 命令詳解
介紹乙個li nux開發除錯中經常用到的命令 kill。kill命令用來刪除執行中的程式或工作。kill可將指定的資訊送至程式。預設的資訊為sigterm 15 可將指定程式終止。若仍無法終止該程式,可使用sigkill 9 資訊嘗試強制刪除程式。程式或工作的編號可利用ps指令或job指令檢視。ki...
ps 和 kill 命令詳解
1.作用 kill命令用來中止乙個程序。2.格式 kill s signal p a pid kill l signal 3.引數 s 指定傳送的訊號。p 模擬傳送訊號。l 指定訊號的名稱列表。pid 要中止程序的id號。signal 表示訊號。4.說明 程序是linux系統中乙個非常重要的概念。l...
linux中的kill詳解
無論你使用哪種作業系統,你一定會遇到某個行為失常的應用,它把自己鎖死並拒絕關閉。在linux 還有mac 你可以用乙個 kill 命令強制終結它。在這個教程中,我們將展示給你多種方式使用 kill 命令終結應用。kill命令和訊號 當你執行乙個 kill 命令,你實際上傳送了乙個訊號給系統,讓它去終...