Linux如何查看和控制進程
前言:程序是保存在外部存儲介質(如硬碟)中的可執行機器代碼和數據的靜態集合,而進程是在CPU及內存中處於動態執行狀態的電腦程式。在Linux系統中,每個程序啟動後可以創建一個或多個進程。例如,提供Web服務的httpd程序,當有大量用戶同時訪問Web頁面時,httpd程序可能會創建多個進程來提供服務。
程序保存在硬碟、光碟等介質中的可執行代碼和數據
靜態保存的代碼
進程在 CPU 及內存中運行的程序代碼
動態執行的代碼
父、子進程
每個進程可以創建一個或多個進程
下面我們將一起來學習查看進程信息及控制進程相關的操作命令。
一、查看進程
使用不同的命令工具可以從不同的角度查看進程狀態。
常用的進程查看命令
1.ps命令——查看靜態的進程統計信息(Processes Statistic)
常見的選項:
a:顯示當前終端下的所有進程信息,包括其他用戶的進程。
u:使用以用戶為主的格式輸出進程信息。
x:顯示當前用戶在所有終端下的進程。
-e:顯示系統內的所有進程信息。
-l:使用長(long)格式顯示進程信息。
-f:使用完整的(full)格式顯示進程信息。
需要注意的是,有一部分選項是不帶「-」前綴的(添加「-」前綴後含義可能會有出入)。習慣上將上述選項組合在一起使用,如,「ps aux」或「ps -elf」
示例1:ps aux 將以簡單列表的形式顯示出進程信息。如下圖
上圖中的輸出信息中,第1行為列表標題,其中各欄位的含義描述如下:
USER:啟動該進程的用戶帳號名稱
PID:該進程的ID號,在當前系統中是唯一的
TTY:該進程在哪個終端上運行。「?」表未知或不需要終端
STAT:顯示了進程當前的狀態,如S(休眠)、R(運行)、Z(僵死)、<(高優先級)、N(低優先級)、s(父進程)、+(前臺進程)。對處於僵死狀態的進程應予以手動終止。
START:啟動該進程的時間
TIME:該進程佔用CPU時間
COMMAND:啟動該進程的命令的名稱
%CPU:CPU佔用的百分比
%MEM:內存佔用的百分比
VSZ:佔用虛擬內存(swap空間)的大小
RSS:佔用常駐內存(物理內存)的大小
示例2:ps -elf 以長格式顯示系統中的進程信息,包含更豐富的內容。大概意思都一樣,PPID為父進程的PID。
示例3:ps 直接執行不帶任何選項,只顯示當前用戶會話中打開的進程。
示例4:結合管道操作和grep命令進行過濾,用於查詢某一個進程的信息。
2.top命令——查看進程動態信息
以全屏交互式的界面顯示進程排名,及時跟蹤包括CPU、內存等系統資源佔用情況,默認情況下每三秒刷新一次,其作用基本類似於Windows系統中的任務管理器。
示例:
上圖中輸出信息開頭部分相關信息的含義如下:
Tasks(系統任務)信息:total,總進程數;running,正在運行的進程數;sleeping,休眠的進程數;stopped,中止的進程數;zombie,僵死無響應的進程數。CPU信息:us,用戶佔用;sy,內核佔用;ni,優先級調度佔用;id,空閒CPU;wa,I/O等待佔用;hi,硬體中斷佔用;si,軟體中斷佔用;st,虛擬化佔用。了解空閒的CPU百分比,主要看%id部分。Mem(內存)信息:total,總內存空間;used,已用內存;free,空閒內存;buffers,緩存區域。Swap(交換空間)信息:total,總交換空間;used,已用交換空間;free,空閒交換空間;cached,緩存空間。在top命令的全屏操作界面中,按P鍵根據CPU佔用情況對進程列表進行排序,或按M鍵根據內存佔用情況排序,按N鍵根據啟動時間進行排序,按h鍵可以獲得top程序的在線幫助信息,按q鍵可以正常地退出top程序。
若通過top排名工具發現某個進程CPU佔用率非常高,需要終止該進程的運行時,可以在top操作界面按k鍵,然後在列表上方將會出現「PID to kill」的提示信息,根據提示輸入指定進程的PID號並按enter鍵確認即可終止對應的進程。
(個人感覺沒必要都記得清清楚楚,了解一下吧,知道大概意思就行,用的時候拉出來看看)
3.pgrep命令——根據特定條件查詢進程PID信息
示例:
4.pstree命令——查看進程樹,以樹形結構列出進程信息
示例:
二、控制進程
1.啟動進程
進程的啟動方式:
手工啟動:由用戶手工輸入命令或執行程序的路徑,可以至少啟動一個進程。手工啟動包括:前臺啟動和後臺啟動。 前臺啟動:用戶輸入命令,直接執行程序
後臺啟動:在命令行尾加入「&」符號
示例:
後臺啟動後直接放入後臺運行,而不佔用前臺的命令操作界面,方便用戶進行其他操作。
調度啟動:用於伺服器維護工作中,例如當需要執行一些比較費時而且佔用資源的任務(如數據備份),這些任務更適合在相對空閒的時候(如夜間)執行。這時就需要用戶事先進行調度安排,指定任務運行的時間,當系統到達指定設定時間時會自動啟動並完成指定的任務。調度啟動的計劃任務進程均在後臺運行,不會佔用用戶的命令終端。調度啟動可以通過at、crontab命令進行設置。 使用 at 命令,設置一次性計劃任務
使用 crontab 命令,設置周期性計劃任務
(關於at和crontab的配置,準備下個文章再講解)
2.改變進程的運行方式
1) 掛起當前的進程
按Ctrl+Z組合鍵將當前進程掛起(調入後臺並停止運行),這種操作在需要暫停當前進程並進行其他操作時特別有用。例如,我們使用windows系統是有時候在本地計算機搜索東西時,發現他搜索的老慢了甚至電腦都有點卡,我們突然不想讓它搜了,就想馬上讓它停止搜索,就是這種感覺。
2) 查看後臺的進程
使用jobs命令,可以查看當前終端在後臺的進程任務,結合「-l」選項可以同時顯示出該進程對應的PID號
示例:
3) 將後臺的進程恢復運行
bg(BackGround)命令,可以將後臺中暫停執行(如,按Ctrl+Z組合鍵掛起)的任務恢復運行,繼續在後臺執行
fg(ForeGround)命令,可以將後臺任務重新恢復到前臺運行
示例:
3.終止進程執行
1) Ctrl+C組合鍵
強制中斷正在執行的命令,如,命令長時間沒有響應的情況下。
2) kill命令
用於終止指定PID號的進程,需要使用進程的PID號作為參數。無特定選項時,kill命令將給該進程發送終止信號並正常退出運行,有時可能該進程已經無法響應終止信號,這時可以結合「-9」(這是數字9不是字母g,有時候容易看走眼)選項強制終止進程。強制終止進程可能會導致程序運行的部分數據丟失,因此不到不得已時慎用。
示例
3) killall命令
用於終止指定名稱的所有進程,當需要結束系統中多個相同名稱的進程時,使用killall命令將更加方便,效率更高。Killall命令同樣也有「-9」選項。
示例:
4) pkill命令
根據特定條件終止相應的進程
常用選項:(大部分選項與pgrep命令基本類似)
-U:根據進程所屬的用戶名終止相應進程
-t:根據進程所在的終端終止相應進程
示例:
下一篇文章將總結如何創建計劃任務(at、crontab計劃任務)