在linux中,通常執(zhí)行任何一個(gè)命令都會創(chuàng)建一個(gè)或多個(gè)進(jìn)程,即命令是通過進(jìn)程實(shí)現(xiàn)的。當(dāng)進(jìn)程完成了預(yù)期的目標(biāo),自行終止時(shí),該命令也就執(zhí)行完了。不但用戶可以創(chuàng)建進(jìn)程,系統(tǒng)程序也可以創(chuàng)建進(jìn)程。可以說,一個(gè)運(yùn)行著的操作系統(tǒng)就是由許許多多的進(jìn)程組成的。
ps命令
ps命令是查看進(jìn)程狀態(tài)的最常用的命令,它可以提供關(guān)于進(jìn)程的許多信息。操作者可以根據(jù)顯示的信息確定哪個(gè)進(jìn)程正在運(yùn)行,哪個(gè)進(jìn)程是被掛起或出了問題,進(jìn)程已運(yùn)行了多久,進(jìn)程正在使用的資源情況,進(jìn)程的相對優(yōu)先級以及進(jìn)程的標(biāo)識號(PID)。所有這些信息對用戶都很有用,對于系統(tǒng)管理員來說更為重要。
ps命令的一般格式是: ps [選項(xiàng)]
Ps命令的常用選項(xiàng)有:
-a 顯示系統(tǒng)中與tty相關(guān)的(除會話組長之外)所有進(jìn)程的信息。
-e 顯示所有進(jìn)程的信息。
-f 顯示進(jìn)程的所有信息。
-l 以長格式顯示進(jìn)程信息。
-r 只顯示正在運(yùn)行的進(jìn)程。
-u 顯示面向用戶的格式(包括用戶名,CPU及內(nèi)存使用情況、進(jìn)程運(yùn)行狀態(tài)等信息)。
-x 顯示所有終端上的進(jìn)程信息。
不帶選項(xiàng)的ps命令可以列出每個(gè)與當(dāng)前shell有關(guān)的進(jìn)程的基本信息:
其中,各字段的含義如下:
PID 進(jìn)程標(biāo)識號。
TTY 該進(jìn)程建立時(shí)所對應(yīng)的終端,“?”表示該進(jìn)程不占用終端。
TIME 報(bào)告進(jìn)程累計(jì)使用的CPU時(shí)間。注意,盡管有些命令(如sh)已經(jīng)運(yùn)轉(zhuǎn)了很長時(shí)間,但是它們真正使用CPU的時(shí)間往往很短。所以,該字段的值往往是00:00:00。
CMD 執(zhí)行進(jìn)程的命令名,command的縮寫。
kill命令
信號(signal,也稱作軟中斷)機(jī)制是在軟件層次上對中斷機(jī)制的一種模擬。異步進(jìn)程可以通過彼此發(fā)送信號來實(shí)現(xiàn)簡單通信。系統(tǒng)預(yù)先規(guī)定若干個(gè)不同類型的信號(如x86平臺中Linux內(nèi)核設(shè)置了32種信號,而現(xiàn)在的Linux和POSIX.4定義了64種信號),各表示發(fā)生了不同的事件,每個(gè)信號對應(yīng)一個(gè)編號。進(jìn)程遇到相應(yīng)事件或者出現(xiàn)特定要求時(shí)(如進(jìn)程終止或運(yùn)行中出現(xiàn)某些錯誤——非法指令和地址越界等),就把一個(gè)信號寫到相應(yīng)進(jìn)程task_struct結(jié)構(gòu)的signal位圖(表示信號的整數(shù))中。接收信號的進(jìn)程在運(yùn)行過程中要檢測自身是否收到了信號,如果已收到信號,則轉(zhuǎn)去執(zhí)行預(yù)先規(guī)定好的信號處理程序。在處理之后,再返回原先正在執(zhí)行的進(jìn)程。
kill命令是通過向指定進(jìn)程發(fā)送指定的信號來終止相應(yīng)進(jìn)程。終止一個(gè)前臺進(jìn)程可以使用<Ctrl+C>鍵,也可以使用kill命令。但是,對于一個(gè)后臺進(jìn)程就只能用kill命令來終止。
kill命令的一般格式是:
kill [-s 信號|-p ] 進(jìn)程號…
kill -l [信號]
其中,各選項(xiàng)的含義如下:
-s 指定要發(fā)送的信號——可以是信號名(如SIGKILL),也可以是對應(yīng)信號的編號(如9)。
-p 指定kill命令只是顯示進(jìn)程的PID(進(jìn)程標(biāo)識號),并不真正發(fā)出終止進(jìn)程的信號。
-l 顯示信號名稱列表,這也可以在
/usr/include/linux/signal.h文件中找到。
使用kill命令時(shí)應(yīng)注意:
(1)kill命令可以帶信號,也可以不帶。如果沒有帶信號,kill命令就會發(fā)出終止信號(編號為15),這個(gè)信號可以被進(jìn)程捕獲,使得進(jìn)程在退出之前清理并釋放資源。也可以用kill向進(jìn)程發(fā)送特定的信號,例如:kill -2 123 。它的效果等同于:當(dāng)在前臺運(yùn)行PID為123的進(jìn)程時(shí),按下<Ctrl+C>鍵。但是,普通用戶使用kill命令時(shí)不要帶信號,或者至多帶信號編號9。
(2)kill可以用進(jìn)程ID號作為參數(shù)。當(dāng)用kill向這些進(jìn)程發(fā)送信號時(shí),必須是這些進(jìn)程的主人。如果試圖撤銷一個(gè)沒有權(quán)限撤銷的進(jìn)程或撤銷一個(gè)不存在的進(jìn)程,就會得到一個(gè)錯誤信息。
(3)可以向多個(gè)進(jìn)程發(fā)信號或終止它們。
(4)當(dāng)kill成功地發(fā)送了信號后,shell會在屏幕上顯示出進(jìn)程的終止信息。有時(shí)這個(gè)信息不會馬上顯示,只有當(dāng)按下鍵使shell的命令提示符再次出現(xiàn)時(shí),才會顯示出來。
(5)應(yīng)注意,信號使進(jìn)程強(qiáng)行終止,這常會帶來一些副作用,如數(shù)據(jù)丟失或者終端無法恢復(fù)到正常狀態(tài)。發(fā)送信號時(shí)必須小心,只有在萬不得已時(shí),才用SIGKILL信號(編號為9),因?yàn)檫M(jìn)程不能首先捕獲它。
要撤銷所有的后臺作業(yè),可以輸入kill 0。因?yàn)橛行┰诤笈_運(yùn)行的命令會啟動多個(gè)進(jìn)程,跟蹤并找到所有要?dú)⒌舻倪M(jìn)程的PID是件很麻煩的事。這時(shí),使用kill 0 來終止所有由當(dāng)前shell啟動的進(jìn)程,是個(gè)有效的方法。
sleep命令
sleep命令的功能是使進(jìn)程暫停執(zhí)行一段時(shí)間。
其一般使用格式是:
sleep 時(shí)間值
其中,“時(shí)間值”參數(shù)以秒為單位,即讓進(jìn)程暫停由時(shí)間值所指定的秒數(shù)。此命令大多用于shell程序設(shè)計(jì)中,使兩條命令執(zhí)行之間停頓指定的時(shí)間。
例如,下面的命令使進(jìn)程先暫停100秒,然后查看用戶test00001是否在系統(tǒng)中:
[root@VM_255_145_centos ~]# sleep 100;who |grep 'test00001'






