初窺Linux之構建你的Linux“工作管理員”
在Windows下,大家肯定有用過工作管理員,特別是我們想看看我們的CPU的使用率、記憶體還剩下多少,又或者某個程式出現了異常還關閉不了時,大家肯定會使用工作管理員來強制結束這個程式。那麼在Linux下有沒有這樣的工具呢?答案是肯定的,作為一個強大的作業系統,Linux怎麼可能沒有“工作管理員”呢?我們可以通過一系列的工具和命令來出色地實現我們在Windows中任務管理中所做的一切工作,構建一個Linux的“工作管理員”。雖然它卻並不像Windows中的工作管理員那樣直觀,然而功能卻非常強大。下面我就用Windows中的任務管理作為對比,介紹這些工具的使用。
一、查看應用程式
在Windows中的任務管理程式中,我們可以很輕鬆直觀地看到我們開啟的應用程式,而在Linux中要如何查看我們(即目前使用者)所開啟的應用程式呢?首先介紹一個最簡單的命令——ps,它能將某個時間點的進程運行情況選取下來。我們可以這樣做:
首先,我開啟了一個瀏覽器程式firefox(中間有一些開啟錯誤的資訊,讀者可以暫時忽略它),然後利用命令ps -l查看自己的bash開啟的程式,從上面可以看到,root這個使用者開啟的程式有bash、firefox和ps。為什麼會有ps這個程式?因為你剛輸入ps命令,讓ps這個程式啟動來進行進程的查看,所以當然它也是root開啟的一個進程。
下面我就給大家講講輸出中各列的意思吧,因為後面的很多命令都會出現相似的資訊。
F:進程的標誌,用以說明說明進程的許可權,通常為4或1,4表示此進程的許可權為root,1表示此進程僅可進行複製(fork) 無法實際執行(exec)。
S:進程的狀態,主要的狀態有R(Running),S(Sleep),D(不可被喚醒的睡眠狀態),T(停止狀態),Z(“殭屍”狀態)。
UID:進程的擁有者(使用者)的ID號,root的ID為0;
PID:此進程的ID號
PPID:此進程的父進程的ID號,可以看到ps和firefox的父進程都是bash,當然了,因為都是由bash這個進程產生的。
C:CPU的使用率,單位為百分比;
PRI:即Priority,代表此進程被CPU所執行的優先順序,數值越小代表進程越快被CPU執行。
NI:Nice,也代表進程被CPU所執行的優先順序,不同的是PRI是系統指定的,而NI則可由使用者指定,且PRI(new) = PRI(old)+ NI, 簡單點來說,就是PRI不能由使用者決定,但是使用者可通過NI對進程的執行優先順序進行調度,對於root其對NI的設定範圍為-20~19,對於普通使用者為0~19(避免一般使用者搶佔系統資源)
ADDR/SZ/WCHAN:都與記憶體有關,ADDR指出進程在記憶體中的位置,running為“-”,SZ表示用掉多少記憶體,WCHAN表示進程是否在運行中,“-”同樣表示在運行中。
TTY:終端機位置;TIME:使用掉的CPU時間,注意不是系統時間;CMD:產生此程式的命令。
看到沒?這可是非常詳細的,比你在Windows的工作管理員看到的資訊詳細多了。
二、查看進程
在Windows的工作管理員中,我們也可以很輕鬆的查看到系統到底進行著哪些進程,這些進程對應著哪些使用者,對CPU和記憶體的使用等情況。在Linux中有什麼好的工具可以實現這個功能呢?這裡跟大家再分享一個工具吧——top。相對於ps是靜態,只能選取一個時間點的進程狀態,則top就是動態持續檢測進程的運行情況了。
1、使用ps靜態查看
下面還是先從ps這個工具說起吧,其實ps也能實現這個功能,其方法如下:
注意:是ps aux 沒有“-”。
由於Linux中的所有的進程真的是非常的多,所以在這裡就不一一顯示出來了,每一列的參數的意義跟第一點中的相同,而比第一點中多出的兩列:VSZ表示該進程使用掉的虛擬記憶體量(KB),RSS表示該進程佔用的固定的記憶體量(KB)。
如果你只看看某個進程的情況那該如何是好呢?非常簡單,例如我想看看firefox這個進程的情況,操作如下:
通過命令管道,把ps輸出的內容進行篩選就可以了,對比第一點的輸出可知,PID為2576的確是firefox的進程ID,真是非常方便和簡單。
2、使用top動態查看
好了,可能你會說Windows的工作管理員中進程的查看可是動態檢測的,不要心急,下面就來介紹一個更加強大好用的工具——top。下面我就介紹一下最簡單的top的用法,top還有很多的功能,大家可以man一下,這裡不一一詳述。操作如下:
top -d 數字,表示每幾秒更新一次,上面的命令表示,每5秒更新檢測一次。
你可以以黑色的粗線為界,把輸出結果分成兩個部分來看,上一部分是系統資訊、系統資源的使用方式和進程數等,下一部分跟之前說的一樣,是系統中的進程的情況,其意義與前面所述相同。
這裡就來說說第一部分,黑線以上的內容的意義吧。
第一行:目前時間為10:58:59,開機到目前為止所經過的時間為1:06,已登陸系統使用者數為2,系統在1、5、15分鐘的平均負載,代表的是1、5、15分鐘系統平均要負責運行幾個進程的意思,越小代表系統越閑置,若高於1,就表示系統比較繁忙了。
第二行:顯示進程的總數和個別進程的狀態,總共有135個進程,1個正在運行,134個正在睡眠,0個處於停止狀態,0個全域進程。最後一個是表示“殭屍”進程的個數,若不是0,最好檢查一下,看哪個進程成殭屍了。
第三行:CPU的整體負載
第四行和第五行:表示實體記憶體和虛擬記憶體的使用方式。
註:很多時候我們會看到系統沒有運行什麼程式,而記憶體卻幾乎用光,請不要擔心,記憶體用光是正常的,因為Linux系統為了加速系統效能,所以會把最近使用到的檔案資料緩衝下來,這樣將來系統要使用該檔案時,就直接由記憶體中取出而不需要從硬碟中調入記憶體。反而要注意的是swap(虛擬記憶體)的使用量,一般來說swap最好不要被使用。
3、查看進程樹或父進程
從之前的例子中我們可以看到,很多進程都有一個父進程,實際上Linux上所有的進程都是init的子進程,那麼我們如何查看一個進程的父進程呢?這點在Windows中的工作管理員中可是做不到的。
1)使用pstree查看,操作如下:
註:A:用ASCII碼來顯示串連,p列出PID,從上面也可以看出,所有的進程都是init的子進程。
2)使用ps查看
沒錯,你還能使用ps這個工具來進行查看,怎麼樣?很強大吧,操作如下:
中間的一些部分省略......
可以看到它列出了之前第一點我們所說的進程的關係,即bash是firefox和ps的父進程。
三、結束任務、結束進程
在Windows上,很多時候我們使用工作管理員來結束某個出現了異常而且不能正常關閉程式或者說結束掉某個進程,這可能也是大多數Windows使用者使用工作管理員的目的。而在Linux下在怎麼辦呢?我們也有很好用的工具,這裡分享兩個常用工具kill和killall。
1)使用kill
其實使用kill和killall都要傳遞一個訊號給進程,告訴來告訴這個結束你想要怎麼結束。常用的資訊有3個,它們都有一個代號和名稱,使用上代號和名稱是等同的,如下:
1(SIGHUP),啟動被終止的進程,相當於重新啟動。
9(SIGKILL),強制中斷一個進程的執行。
15(SIGTERM),以正常的結束進程來終止該進程,注意,如果該進程已發生問題,就是無法使用正常的方法終止時,輸入這個訊號也是沒有用的。
下面我們就來看看kill的使用吧,操作如下:
首先用ps -l來找出所要刪除的進程的ID號,然後使用kill刪除進程,從後面的查看中可以看到firefox已經被終於。而kill的用法為kill -signal PID。由於它後面要加上PID所以經常配合ps、pstree等命令一起使用。
2)使用killall
我知道你想說,kill很麻煩,我想要終止一個進程還要找到它的PID,真的是不太爽啊,有沒有辦法讓我可以根據“執行命令的名稱”來給予訊號呢?答案是肯定的,它就是killall。操作如下:
這裡重新運行firefox這個進程,然後使killall來終於這個進程,從最後的輸出結果來看,firefox已經被我們正常終於。怎麼樣?很方便吧!補充一下,killall的用法為:killall -signal 命令名稱。
註:如果大家想在像windows中那樣強制結束進程的話,就把signal改為9或者9所對應的名稱SIGKILL即可,這適用於kill和killall。
四、查看網路情況
在Windows的工作管理員中,也有一個叫“連網”的資訊頁,雖然大家可以在Windows下不怎麼會關注它(至少我是這樣),但是網路的使用方式在Linux下是非常重要的,因為Linux通常是作為伺服器系統來使用的。然而在Linux下有沒有這樣的工具呢?當然有,它就是netstat,操作如所示:
由於本人對網路部分還不是很瞭解,在這裡不作過多的解釋,大家要用到時可以man netstat一下。
五、其他工具
儘管在前面的工具中(如top)也有一些是可以查看系統的各種資源的情況,但是這些工具可能產生較多的你不想要關心的資訊,例如,我只想看看CPU和記憶體的使用方式,我用top的話,就會產生很多我並不關心的進程的資訊。所以下面來介紹一些功能專一點的工具。
1、free:查看記憶體的使用方式
free的使用非常簡單,操作如下:
命令中m表示輸出資料的單位為MB,當然你也可以使用b、k、g等。還可以加一個參數t來顯示實體記憶體與swap的總量。
2、uptime:查看系統啟動的時間和工作負載,使用非常簡單直接輸入uptime即可,不詳述了。
3、vmstat:檢測系統資源變化
vmstat可以實現CPU/記憶體/磁碟輸入輸出狀態等。下面以舉幾個例子說明一下這個工具的使用吧。
1)統計目前主機CPU的狀態,每秒1次,共統計2次,操作如下:
下面我來解釋一下一些列的意義吧。
r:等待運行中的進程數量,b:不可被喚醒的進程數量,這兩個選項數學越大,表示系統越繁忙。
si:由磁碟中將程式取出的量,so:由於記憶體不足而將沒用到的程式寫入到磁碟的swap的容量。
bi:由磁碟寫入的塊數量,bo:寫入到磁碟去的塊數量。這部分數值高,表示系統I/O繁忙。
in:每秒被中斷的進程次數,cs:每秒鐘進行的事件切換次數;
us:非核心層CPU使用狀態;sy核心層使用CPU的狀態,id:閑置的狀態;wa:等待I/O所消耗的CPU狀態;st:被虛擬機器所盜用的CPU使用狀態。
2)檢測系統上所有的磁碟的讀寫狀態
操作非常簡單,輸入vmstat -d即可,不一一詳述。
六、總結
看到這裡你已經看到這個Linux“工作管理員”的強大了吧,至少個人感覺比Windows中的工作管理員強大多了。它主要由ps、pstree、top、kill、killall、free、netstat、uptime、vmstat等工具組成。