Linux進程管理詳解,linux進程管理
何謂進程?進程,就是正在執行的一個程式或命令,每一個進程都是一個運行實體,有自己的地址空間,並佔用一定的系統資源。簡而言之,進程就是運行中的程式。在Linux中,諸如ls等命令都是進程,只不過某些命令進程在運行完後立即關閉了。而像apache等常駐記憶體服務也會產生進程,例如,一個使用者訪問一個apache下的網站,必定會產生一個進程。Linux中有各種各樣的進程,尤其是在伺服器中,我們需要即時瞭解系統中所有進程的狀態,因此本篇文章將針對進程的管理進行詳細地講解。
在具體講解進程管理前,我們先討論一下進程管理的作用。總的來說,進程管理具有如下三個作用:
- 判斷伺服器健康狀態:這是進程管理中最主要的作用,通過分析進程的狀態(記憶體、CPU佔有率等)判斷伺服器的負載和安全狀態。
- 查看系統中的所有進程:這是進程管理的基礎,通過查看系統中的所有進程狀態才能決定對進程作出什麼樣的管理。
- 殺死進程:進程管理中的輔助手段,殺死進程只是迫不得已的做法,一般情況下,進程都有正常的退出方法,只有進程不能正常結束時,才使用殺死進程的方法。
在瞭解了進程管理的作用後,我們來看進程查看命令的使用。進程查看命令主要有ps、pstree、top三個命令,下面我們逐一講解。
命令選項:
- -a :顯示一個終端所有的進程
- -u:顯示進程的歸屬使用者和記憶體佔用情況
- -x:顯示沒有控制終端的進程
- -l:長格式顯示更詳細的資訊
- -e:顯示所有進程
命令組合:總的來說,ps命令具有兩種組合格式,一種是ps aux,一種是ps -le。
- ps aux:查看系統中的所有進程,使用BSD作業系統格式
註:ps aux和ps -aux命令有區別,在ubuntu中ps -aux不會報錯,而在centos中,ps -aux會提示警告資訊。使用man ps可以查看文檔描述,但是在使用過程中不必糾結於二者的區別。
- ps -le:查看系統中的所有進程,使用Linux標準格式
在實際使用過程中,我們沒有必要對ps命令輸出的所有進程都認識,應該關注的是每一列輸出資訊代表的含義是什麼。下面以ps aux為例,講解對應列的含義:
- USER:產生該進程的使用者。
- PID:進程的ID。
- %CPU:該進程佔用的CPU資源百分比。
- %MEM:該進程佔用實體記憶體百分比。
- VSZ:該進程佔用虛擬記憶體的大小,單位KB。
- RSS:該進程佔用的實際實體記憶體大小,單位KB。
- TTY:該進程是在哪個中斷啟動並執行,其中tty1-tty7代表本地控制終端,tty1-tty6為字元終端,tty7為圖形終端。pts/0-255代表虛擬終端。
- STAT:進程狀態。常見狀態有:
- R:運行
- S(大寫):睡眠
- T:停止狀態
- s(小寫):包含子進程
- +:後台進程
- START:該進程的啟動時間。
- TIME:該進程佔用CPU的運算時間。
- COMMAND:進程名
(註:PID等於1的進程 /sbin/init 是系統的啟動進程,是系統中所有進程的父進程)
2.pstree命令產看進程樹
命令選項:
- -p:顯示進程的PID
- -u:顯示進程的所屬使用者
直接使用pstree命令,輸出的是系統的進程樹,其中相同名稱的進程使用數字*進程名的形式輸出,使用pstree -p命令可以將不同PID的進程展開:
3.top命令查看進程狀態
命令選項:
- -d 秒數:指定top命令每隔幾秒更新,預設是3秒。
- -b:使用批處理模式輸出,一般和-n合用。
- -n 次數:指定top命令執行的次數。
top命令互動模式下的命令:
- ?或h:顯示互動模式的協助文檔。
- p:以CPU使用率排序,預設。
- M:以記憶體使用量率排序。
- N:以PID排序
- q:退出top命令互動模式
一般的,在終端輸入top命令即進入了top互動模式:
此時可以鍵入互動模式下的命令對輸出進行不同的排序。在top命令下,我們重點關注最上面五行系統資訊:
- 11:31:20 :系統目前時間,預設每3秒更新。
- up 113days,16:20 :系統已運行113天16個小時20分鐘。
- 3 users:當前登入了3個使用者。
- load average:0.00,0.00,0.00 :系統在之前1分鐘,5分鐘,15分鐘的平均負載,一般認為對於每一個CPU核心,該數值小於1時系統負載較小,大於1時系統負載較大。
- Tasks:112total :系統中的進程總數。
- 2 running:正在啟動並執行進程數。
- 110 sleeping:睡眠進程數。
- 0 stopped:正在停止的進程。
- 0 zombie:殭屍進程。
- Cpu(s):0.3%us :使用者模式佔用的cpu百分比。
- 0.3%sy:系統模式佔用的cpu百分比。
- 0.0%sy:改變過優先順序的使用者進程佔用百分比。
- 99.3%id:空閑cpu的百分比。
- 0.0%wa:等待輸入/輸出的進程佔用cpu百分比。
- 0.0%hi:硬插斷要求服務佔用cpu百分比。
- 0.0%si:非強制中斷請求服務佔用cpu百分比。
- 0.0%st:虛擬時間百分比。
- 第四行為實體記憶體的資訊,第五行為交換分區的資訊,單位為kb,注意buffers是用作緩衝的記憶體大小,cached是用作緩衝的記憶體大小。
4.kill命令終止進程
其中,重點關注kill -1(數字1)和kill -9。kill -1用於重啟進程(而不是殺死),不影響現有進程的使用,一般在修改某種服務的設定檔之後使用該命令;kill -9用於強制終止進程,基本格式為 kill [數字]進程PID。
- killall命令:基本格式為killall [選項][訊號]進程名。killall的選項有-i和-I,-i用於互動,詢問是否殺死某個進程,-I用於忽略進程名的大小寫。
- pkill命令:基本格式為pkil [選項][訊號]進程名 。選項-t 終端號 用於按照終端號踢出使用者。
首先使用w命令查看目前使用者,可以見到共有四個遠端使用者終端,當前正在使用的終端為pts/4,因為其正在使用w命令。接著用pkill命令踢出pts/0,再次用w命令查看,可見此時pts/0使用者已被踢出。
5.優先順序修改nice命令:基本格式為nice -n 數值 進程名。在前面ps -le命令中,表示優先順序的列有PRI(priority)和NI(nice),真正的優先順序由PRI決定,數值越小優先順序越高。使用者只能修改NI的值,修改後的PRI=原PRI+NI。為修改apache服務進程的優先順序樣本。由於優先順序對日常使用無很大影響,此處不加贅述,有興趣的可以自行查閱相關資料。