linux學習之路之進程管理

來源:互聯網
上載者:User

標籤:主要介紹進程如何工作的

什麼是進程?

所謂進程就是將一個二進位檔案載入到記憶體形成的一個個體,這就是一個進程。

在我們的linux系統中,系統只識別二進位檔案,所以一個系統要想正常的運行時,必須啟動一些二進位檔案,從而形成進程,在以這些進程的方式去執行相應的任務。


我們常常聽到所謂的程式,那麼程式和進程是什麼關係呢?

剛剛說過進程是由二進位檔案載入到記憶體中形成的。而這些二進位檔案就是程式。

可以這麼來理解:

程式是實實在在地檔案,是存放在磁碟上的。

進程是一個邏輯概念,進程是存在記憶體當中的,所以當機器重啟,這些進程也隨之銷毀了。而程式不會,因為他們始終存在磁碟上的。



我們知道在我們的系統上,可以同時運行多個程式,進而會產生多個進程,而這些進程最終都會交給CPU處理,但是我們的CPU卻只有一個,那麼這些CPU是如何處理這些進程的呢?

剛剛說過進程是存在記憶體當中的。而記憶體是一塊地址空間,所以我們的進程在記憶體中都佔用了一段地址空間,用來存在進程資料。而這些將要被執行的進程放在CPU的可執行隊列中,CPU逐個進行處理。並且核心為這些每一個進程分配一段時間,這樣CPU可以有效處理每一個進程,避免CPU長時間的消耗在處理某個進程上。

 

 

進程是有進程狀態的,進程共有一下5種狀態:

1、TASK_RUNNING:處於這種狀態下的進程正在被CPU執行或者將要被CPU執行

2、TASK_INTERRUPTIBLE:叫做可中斷的睡眠狀態。這種狀態下的進程處於睡眠狀態直到其他條件

        或者事件完成時才會被CPU處理。或者當某個進程已經被CPU處理完了,而核心分配處理的這些

        進程時間過長,這些進程也會處於睡眠狀態。而進程在睡眠狀態下,CPU可以去處理其他進程。

3、TASK_UNITERRUPTIBLE:不可中斷的睡眠狀態。處於該狀態下的進程是不可中斷的,因此該進

        程一直等待接受其他訊號,因此CPU一直處於等待狀態。

4、TASK_STOPPED,TASK_TRACED:停止或者跟蹤狀態。

        當進程收到一個SIGSTOP訊號時,該進程處於停止狀態

        當某個進程被他所監控或者跟蹤的進程所操作時,該進程處於TASK_TRACED狀態

5、TASK_DEAD,TASK_ZOMBIE,殭屍狀態:處於該狀態下的進程執行完畢後,並不釋放所佔有的

        記憶體空間,因此會導致實體記憶體的容量變小。

 

那麼如何觀察進程的使用方式呢?

可以使用ps命令來查看

不過ps只可以靜態查看進程的使用方式,也就是說ps命令只能顯示某一時刻的進程使用狀況。不能夠動態顯示進程的使用方式,要想動態顯示進程資訊,可以使用top命令來查看。

文法格式:ps [option]

其中ps命令分為BSD風格的和SysV風格的

BSD風格的選項有:

a:顯示所以與終端有關的進程

u:顯示這個進程的屬主

x:顯示與終端無關的進程

l:長格式來顯示

通常ps aux一起使用

例如:

650) this.width=650;" title="1.png" src="http://s3.51cto.com/wyfs02/M01/3F/85/wKiom1PKb9ygPmx_AAC8mtc3-p4396.jpg" alt="wKiom1PKb9ygPmx_AAC8mtc3-p4396.jpg" />

其中每一列表示的欄位意思如下:

USER:表示該進程被哪個使用者運行

PID:該進程的ID號,用來標識該進程的

%CPU:該進程使用掉的CPU資源的百分比

%MEM:該進程使用掉的實體記憶體的百分比

VSZ:表示 該進程使用掉的虛擬記憶體空間大小

RSS:表示常駐記憶體空間大小,就是該進程佔有的固定記憶體大小,該空間是不能交換出去的

TTY:表示該進程是在哪個終端下啟動並執行

STAT:表示該進程的所處狀態

START:表示該進程啟動到現在為止所經過的時間

TIME:表示該進程實際使用CPU運作的時間

COMMAND:表示執行該進程的實際指令是什麼

 

SysV風格的選項有:

-e:與-A一樣,顯示所有的進程

-l:以長格式的形式顯示,可以顯示自己的bash相關進程

-F:額外的全部格式,就是顯示的列多一些

-f:與-F類似,顯示的列少一些

650) this.width=650;" title="2.png" src="http://s3.51cto.com/wyfs02/M01/3F/85/wKiom1PKdVPCbjxyAAFd-YGL8xo180.jpg" alt="wKiom1PKdVPCbjxyAAFd-YGL8xo180.jpg" />

其中這些欄位的意思為:

F:表示這個進程的旗標,說明這個進程的總結許可權,常見的號碼有:

    4:表示該進程的許可權為root

    1:表示該子進程只進行複製(fork)而沒有實際執行(exec)

S:表示進程的狀態,其中:

    R:表示該進程處於運行狀態

    S:表示可中斷的睡眠狀態

    D:表示處於不可中斷的睡眠狀態

    T:表示該進程處於停止狀態

    Z:表示該進程處於殭屍狀態,該進程所佔有的內容空間不能移除掉

PID:該進程的ID號

PPID:該進程的父ID號

C:表示CPU的使用率,單位為百分比

PRI:表示進程的優先順序,值越小越優先被CPU處理

NI:nice值,nice值是可以用來調整進程的優先順序的

ADDR:表示該進程在記憶體中的位址範圍,當進程處於RUNNING狀態時該處顯示‘-‘

SZ:表示該進程使用掉的記憶體大小

WCHAN:表示該進程是否在運作,‘-‘表示該進程正在運行

RSS:常駐記憶體空間大小,該大小不能被交換出去

STIME :該進程啟動到現在所經過的時間。

TTY:表示該進程是在哪個終端下啟動並執行

TIME:表示實際該進程使用CPU的時間

CMD:表示執行該進程使用的指令是什麼

 

ps   -o 屬性1,屬性2...

用來顯示進程指定的屬性資訊,預設ps只顯示前台的進程,因此顯示的進程比較少。

通常可以和ax選項結合使用,顯示所有的進程的指定屬性資訊

例如:顯示所有的進程的pid,comm,ni屬性資訊,且只顯示5行。

 650) this.width=650;" title="4.png" src="http://s3.51cto.com/wyfs02/M00/3F/86/wKiom1PKgRDgxzmWAACWUYQw3as384.jpg" alt="wKiom1PKgRDgxzmWAACWUYQw3as384.jpg" />   

 

 

剛剛說過ps命令只能查看某一時刻進程的使用資訊,不能動態顯示進程的使用資訊,要想動態顯示進程的使用資訊則使用top命令來查看

top:動態觀察進程的變化

文法格式:top [option]

-d #: 指定延時時間長度,單位為秒,指的是每個多少秒顯示一次,預設是5秒

-b:以批模式的形式顯示,就是一頁接著一頁顯示

-n #:在批模式下,共顯示多少批

在top命令下,還可以使用很多的子命令

    M: 根據駐留記憶體大小進行排序

    P:根據CPU使用百分比進行排序

    T: 根據累計時間進行排序

    l: 是否顯示平均負載和啟動時間

    t: 是否顯示進程和CPU狀態相關資訊

    m: 是否顯示記憶體相關資訊

    c: 是否顯示完整的命令列資訊

    r:修改進程的優先順序

    q: 退出top

    k: 終止某個進程

650) this.width=650;" title="39.png" src="http://s3.51cto.com/wyfs02/M00/3F/88/wKiom1PKhX7QdMiQAAHzxVMTe2E266.jpg" alt="wKiom1PKhX7QdMiQAAHzxVMTe2E266.jpg" />

第一行顯示的資訊有:

        當前的系統時間

        開機啟動到現在所經過的時間

        有多少個使用者登入到系統上了

        該進程在1,5,15分鐘內的平均工作負載值,該值越小,表示系統越空閑

第二行顯示的資訊有:

        目前系統上有多少個進程

        這些進程所處的進程狀態是什麼

第三行顯示的資訊有:

        CPU的整體負載情況

第四行顯示的是實體記憶體使用的情況

第五行顯示交換分區使用方式

在top下部分的畫面中只介紹一個欄位的意思,其他欄位跟上面欄位的意思大致相同

TIME+:表示進程實際使用CPU的時間累加和。 (說明該進程可能被重複使用)

 

在上面我們提到了priority和nice的概念,這個屬性都與進程的優先順序有關係的。

我們知道進程是在記憶體中形成的,而進程要被CPU處理,必須要先進入CPU的可執行隊列中,然後CPU在逐個處理可執行隊列中的進程。也就是說那些要被處理的進程全部都會進入到CPU的可執行隊列中,而預設情況下,CPU根據進程在隊列中的順序來處理這些進程。所以,在某些情況下,一些比較重要的進程可能會比較晚處理,而那些不重要的進程會優先處理。這顯然不符合使用者的心意。因此為了讓CPU能夠優先處理某些進程,於是就給每一個進程優先順序,優先順序值越小,該進程越先被CPU處理。

在Linux系中,進程的優先順序的範圍為0-139.其中100-139有使用者來控制的,0-99則是由核心來控制的

而一個進程的新優先順序是有原來的優先順序和nice值組成的。

(new)priority=(old)priority+nice

在這裡nice值的範圍為-20--19

其中root使用者的可調整的nice值為-20--19

普通使用者可調整的nice值為0-19,且普通使用者只能將nice越調越高,不能調低

因此改變某個進程的優先順序,只需要改變nice值即可。

改變nice值有2種方式

1、在啟動進程的時候指定nice值

文法格式:nice [-n #]  COMMAND

 

2、調整已經啟動的進程的nice值

文法格式:renice   NI  PID

例如修改top這個進程的nice為5

650) this.width=650;" title="5.png" src="http://s3.51cto.com/wyfs02/M02/3F/8B/wKioL1PKlJaynWlAAAHljP1ytbo360.jpg" alt="wKioL1PKlJaynWlAAAHljP1ytbo360.jpg" />

 

進程的管理

其實進程之間是可以相互控制的,進程間的相關管理是通過發送一個訊號(Signal)來實現的,不同的Signal表示的意思不一樣。主要常見的訊號Signal代號和名稱有:

    1:SIGHUP:讓一個進程不用重啟,就可以重讀其設定檔,並讓新的配置資訊生效

    2:SIGHINT:類似與命令列中使用ctrl+c來中斷一個進程

    9:SIGKILL:強制殺死一個進程

    15:SIGTERM:終止一個進程(該進程正常退出來完成終止),該訊號為預設訊號

 

 

本文出自 “linux學習之路” 部落格,謝絕轉載!

linux學習之路之進程管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.