上篇文章詳細介紹了LINUX命令程序通過獲取SHELL環境中的數據(此處的數據通常稱爲環境變量)來輸出本機相應的配置數據,從而掌握在LINUX中SHELL環境的搭建技巧。那麼,今天,這篇文章主要圍繞linux系統中的進程展開描述。
程序與進程的區別
程序的概念:作爲二進制文件,屬於靜態的;
進程的概念:作爲程序運行的過程,屬於動態的,具有生命週期及其運行狀態特徵。
說到“進程”,就會聯想到“多任務”這個概念。目前幾乎所有的操作系統都支持多任務,即操作系統初始化後可支持多任務多進程同時運行或無縫切換。Linux核心是通過使用進程來管理多任務。
在linux系統實際運行當中,服務器有時會變得呆滯,運行緩慢,或者某個程序停止響應。那麼,在遇到上述情況如何處理或者應對呢?
進程的工作流程(原理)
當linux系統啓動時,linux內核先將一些它自己的活動初始化爲進程,然後運行init程序。緊接着,init程序依次地運行一系列的shell 腳本(一般位於/etc目錄路徑),它們可啓動所有的系統服務。當然,許多系統服務將以守護(daemon)程序的形式出現,守護程序僅在後臺運行,即使linux系統沒有登錄,linux系統也會在後臺運行一些例行事務。
linux內核維護着所有進程的信息,以此來保持所有任務井然有序。
進程的查看--ps命令(靜態查看)
ps,全稱process status。先簡單舉個例子來介紹ps 命令:
[root@linuxProbe ~]$ ps
PID TTY TIME CMD
5198 pts/1 00:00:00 bash
10129 pts/1 00:00:00 ps
//表示有兩個進程,分別爲進程5198 和進程10129,各自對應的命令是bash命令和ps命令。
// TTY 全稱“Teletype”(直譯電傳打字機),進程的控制終端。
// TIME 字段表示進程所消耗的CPU的時間數量。
默認情況下,ps命令不會顯示更多的進程信息,僅僅是列舉與當前會話相關的進程信息。那麼爲了得到更多關於系統運行狀態的信息,我們需要將ps命令加上一些選項參數:
[root@linuxprobe ~]$ ps x
PID TTY STAT T ME COMMAND
2799 ? Ssl 0:00 /usr/libexec/bonobo-activation-server –ac
2820 ? Sl 0:01 /usr/libexec/evolution-data-server-1.10 –
//ps命令的常見參數以及作用如下表所示:
參數 |
作用 |
-a |
顯示所有進程(包括其他用戶的進程) |
-u |
用戶以及其他詳細信息 |
-x |
顯示沒有控制終端的進程 |
//STAT全稱“state”,代表了進程當前狀態,如下表所示:
狀態 |
代表含義 |
R(運行) |
進程正在運行或在運行隊列中等待 |
S(中斷) |
進程處於休眠中,當某個條件形成後或者接收到信號時,則脫離該狀態 |
D(不可中斷) |
進程不響應系統異步信號,即便用kill命令也不能將其中斷 |
Z(僵死) |
一個已經終止的子進程,但是它的父進程還沒有清空它。(父進程沒有把子進程從進程表中刪除) |
T(停止) |
已停止,進程收到停止信號後停止運行。 |
< |
高優先級進程。這種狀態下,可能會授予進程更多、重要的資源,更多的CPU 時間數量。具有高優先級的進程據說是不好的(less nice),因爲它佔用了比較多的CPU 時間,這樣就給其它進程留下很少時間。 |
N |
低優先級進程。只有當其它高優先級進程被服務了之後,纔會得到處理器時間。 |
除了上面7種常見的進程狀態,還有被鎖進內存(L)、包含子進程(s)以及多線程(l)這3種補充形式,在此不再一一描述了。
ps 命令能夠列舉許多運行狀態的詳細信息,弊端是它只能提供ps 命令執行時刻的機器狀態快照,也就是相對靜態的,不能實時滾動最新數據。
進程的查看--top命令(動態查看)
linux 中top命令能夠動態地查看其系統狀態,《Linux就該這麼學》的作者劉遄在其書籍中寫道:完全可以將它看作是Linux中“強化版的Windows任務管理器”。不容置疑,top命令確實一個相當好用的性能分析工具。
top命令執行結果的前5行,概況了系統整體的統計信息,其所代表的含義如下表所示:
行號 |
字段 |
意義 |
1 |
top |
程序名 |
18:35:07 |
當前時間 |
|
up 36 min |
這是正常運行時間。它是計算機從上次啓動到現在所運行的時間。這個例子顯示系統已經運行了36分鐘 |
|
1 user |
有1個用戶登錄系統 |
|
load average |
加載平均值是指,等待運行的進程數目,也就是說,處於可以運行狀態並共享CPU 的進程個數。這裏展示了三個數值,每個數值對應不同的時間段。第一個是最後0.01秒的平均值,下一個是前0.05的平均值,最後一個是前0.03的平均值。各項平均值都低於1.0,則表明運行狀態良好 |
|
2 |
Tasks |
列舉了進程總數和這些進程的各種狀態(運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數) |
3 |
Cpu(s) |
這一行描述了CPU 正在進行的活動的特性。依次代表的含義是用戶佔用資源百分比、系統內核佔用資源百分比、改變過優先級的進程資源百分比、空閒的資源百分比等。其中數據均爲CPU數據並以百分比格式顯示,例如“99.9 id”意味着有99.9%的CPU處理器資源處於空閒。 |
4 |
Mem |
物理內存的使用情況(依次代表物理內存總量、內存空閒量、內存使用量、作爲內核緩存的內存量) |
5 |
Swap |
交換分區(虛擬內存)的使用情況(依次代表虛擬內存總量、虛擬內存空閒量、虛擬內存使用量、已被提前加載的內存量) |
已經到深夜,關於linux系統中的進程的描述暫時描述到這裏,這篇文章詳細介紹了靜態查看ps命令和動態查看top命令,關於進程的介紹還有如何控制進程(中斷、停止等),下篇文章再補充吧。