Linux如何查看和控制進程


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:根據進程所在的終端終止相應進程

示例:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM