Linux系統進程管理

本章學習內容

    ——進程概念

    ——進程創建、切換和撤銷

    ——進程調度

    ——進程分類

    ——進程狀態

    ——進程管理工具

引言

    在linux系統中,內核的功用有:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等,在這眾多的模塊中,進程管理是相對重要的一環,即使不像文件系統和網絡功能那么復雜。在進程管理中,內核對進程的創建、切換、撤銷和調度都有很詳細的定義。

1、進程及相關概念   

    <1>進程:進程可以理解為程序執行的一個有生命周期的實例,有唯一的PID來標識,它包括可執行程序以及與其相關的系統資源,比如打開的文件、掛起的信號、內核內部數據、處理器狀態、內存地址空間及包含全局變量的數據段等。從內核的角度看,進程也可以稱為任務。

    <2>進程描述符:與進程相關的事情非常多,比如進程的PID、狀態、進程的優先級、進程的地址空間、允許該進程訪問的文件等等,Linux內核為此專門設計了一個類型為task_struct的結構體,稱之為進程描述符。進程描述符中包含了內核管理進程的所有信息,可以說,只要得到一個進程的進程描述符,就可以知道一個進程的所有信息。

2、進程的創建、切換和撤銷

    <1>進程創建在系統啟動時,會先在CPU上加載內核,之后內核創建第一個進程init(centos7上是systemd),init通過系統調fork()創建各種各樣的子進程,各進程之間遵循Cow機制(即修改數據才分配內存)。

    <2>進程切換:進程切換又稱為任務切換、上下文切換。它是這樣一種行為,為了控制進程的執行,內核掛起當前在CPU上運行的進程,并恢復以前掛起的某個進程的執行。

    <3>撤銷進程:進程終止后,需要通知內核以便內核釋放進程所擁有的資源,包括內存、打開文件以及其他資源,如信號量

3、進程調度    

    <1>調度策略:調度策略就是這樣一組規則:決定什么時候以怎樣的方式選擇一個新進程運行。所以定義一個進程的優先級來滿足這樣一種策略。這個策略以0-139的優先級來表示。

           實時優先級:1-99

               無需調整,數字越大,優先級越高

           靜態優先級:100-139

               可調整,數字越小,優先級越高

  wKiom1fRULmwe7ecAAAPyP-t1oo636.png

優先級以Nice值調整

    Nice:-20—-19 ,存在于task_struct結構體中  

公式如下:        

pri(new)=nice+pri(old)    

    <2>調度算法:早起的Linux中,調度算法是根據進程的優先級選擇“最佳”進程來執行,它的缺點是時間開銷與“可運行進程數量”有關。某種調度算法一定滿足一種函數關系,業界稱為Big O        

        Big O:時間復雜度,用時和規模的關系。有:

        O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)

4、進程類型 

    <1>進程的分類標準一: 

       守護進程: 監控非獨立服務的進程

       普通進程:只負責自己本身服務的提供

       注意:兩者可相互轉化   

    <2>進程的分類標準二:

       CPU-Bound:CPU密集型,非交互(圖形)

       IO-Bound:IO密集型,交互(操作)

5、進程狀態 

   在內存中運行的進程也有著各種各樣的狀態

        運行態R:running

        就緒態:ready

        睡眠態

            可中斷S:interruptable

            不可中斷D:uninterruptable

        停止態T:stopped,暫停于內存中,但不會被調度,除非手動啟動

        僵死態Z:zombie,結束進程,父進程結束前,子進程不關閉

6、進程作業

進程在運行時,我們可以稱其為作業,根據其運行的環境,可分為前臺作業和后臺作業

wKiom1fRWKXTQd5KAAAqYeVP2i0239.png

注:ctrl+z、ctrl+c只對前臺運行的進程有效,jobs查看作業。

后臺運行的程序如果有標注輸出,比如ping,ctrl+z,ctrl+c無法生效。要殺死進程才可以。

也可以使用kill向進程發信號

    <1>常用信號:man 7 signal

1) SIGHUP: 無須關閉進程而讓其重讀配置文件

2) SIGINT: 中止正在運行的進程;相當于Ctrl+c

9) SIGKILL: 殺死正在運行的進程

15) SIGTERM:終止正在運行的進程

18) SIGCONT:繼續運行

19) SIGSTOP:后臺休眠

    <2>指定信號的方法:

(1) 信號的數字標識;1, 2, 9

(2) 信號完整名稱;SIGHUP

(3) 信號的簡寫名稱;HUP

補充:killall COMMAND:殺死所有COMMAND進程

      pkill -u USER:殺死所有以USER身份運行的進程

      pkill -u root:危險操作,切勿模仿

既然進程可以運行在后臺,提供一種方法將多個進程同時運行在后臺,增強效率。

    (f1.sh&);(f2.sh&);(f3.sh&)

    { f1.sh& f2.sh& f3.sh& }

    或者寫在一個腳本中。 

    vi all.sh

    f1.sh&

    f2.sh&

    f3.sh&

7、進程管理工具

<1>ps axu

wKioL1fPsIDCHV0BAAGF6aa_zDI491.jpg

USER 運行進程的用戶
PID 進程ID
%CPU 占用CPU
%MEM 占用內存
VSZ 虛擬內存集
RSS 實際內存集
TTY 終端信息
STAT 進程狀態
START 進程狀態
TIME 運行時間
COMMAND 進程名稱

也可以通過特定的選項來顯示信息

  ps -axo pid、comm、%cpu、%mem、state、tty、euser、ruser

  wKiom1fPs0rimN5zAADe2LSLPlE923.jpg

  以上也證明了passwd適用于suid權限的,雖然運行用戶是user,但其真正有效的是root

<2>uptime

wKioL1fPuy7A5Su5AABP2Afi92E316.jpg

開機時間

運行時間

登陸用戶數目

平均負載:指在特定時間間隔內運行隊列中的平均進程數

    第一分鐘負載

    第五分鐘負載

    第十分鐘負載

    注意:1、5、10分鐘的平均負載,一般不會超過1                            

    參考值:如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。

         如果linux主機是1個雙核CPU的話,當Load Average為6的時候說明機器已經被充分使用。

<3>top

wKiom1fPwpTyoAdnAAI5SPDB4JM569.jpg

Tasks

total 進程總數
running 運行進程數
sleeping 休眠態進程數
stopped 停止態進程數
zobie 僵死態進程數

%Cpu(s)

us(user space) 用戶空間占用CPU百分比
sy(system) 內核空間占用CPU百分比   注:高負載時:us:sy=7:3
ni(nice) 修改nice值占用的CPU百分比
id(idle)  空閑的CPU百分比
wa(wait)  等待IO完成占用的CPU百分比
hi(hardware interrupt)  硬中斷占用CPU百分比
si(software interrupt) 軟中斷占用CPU百分比
st(stole) 被偷走的CPU,比如VMware

buffer(緩沖) 元數據
cache(緩存) 數據

PID 進程號
USER 進程發起者
PR(priority) 優先級
NI(Nice) nice值
VIRT 虛擬內存集
RES 常駐內存集
SHR 共享內存集
S(status) 狀態
%CPU CPU占用比
%MEM 內存占用比
TIME+ 運行時長
COMMAND 啟動進程

對顯示排序的方法:

P 占據的CPU百分比
M 占據內存百分比
T 累積占據CPU時長

首部信息顯示:

l uptime信息
t tasks及cpu信息
#數字 cpu分別顯示
m memory信息
s 修改刷新時間間隔
Esc 退出
k 終止指定進程
W 保存文件
q 退出命令

注:

直接查看進程編號  pidof COMMAND  或者  ps aux | grep **—–>kill

<4>htop

wKiom1fP0BCjzJ8vAAUL53ILZdo725.jpg

比top更加高級的進程管理軟件

f1幫助

f2切換CPU、mem、swap顯示方式

f10退出

選中進程執行k

<5>vmstat:查看磁盤吞吐量

wKiom1fP0tOQA_Q4AADefO6sBf8620.jpg

vmstat -s: 內存的匯總信息

r 等待運行的進程的個數,和核心數有關
b 處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)

swap:

si 從磁盤交換進內存的數據速率(kb/s)
so 從內存交換至磁盤的數據速率(kb/s)

io:

bi 從塊設備讀入數據到內存的速率(kb/s)    讀
bo 從內存寫入磁盤的速率(kb/s)            寫

分別使用 dd if=/dev/sda of=/dev/null

         dd if=/dev/sda of=/tmp/f1 可做測試

<6>glanceswKioL1fP2EiAUlFZAARQ8reM570930.jpg    h: 幫助信息                                                                                特性C/S結構

Server端:glances -s -B IP

Client端:glances -c IP                                                                    <7>dstat

wKiom1fP2oGhaLMMAAHqNGgIo9o300.jpg

磁盤的讀寫可通過dd if=/dev/sdb of=/dev/zero 測試

網絡監控可通過ping -f IP -s 65507測試。                     

原創文章,作者:mfwing,如若轉載,請注明出處:http://www.www58058.com/46016

(0)
mfwingmfwing
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • 26期全程班-第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     cp  復制命         ex:cp -a /etc/initab /var/log/message /tmp/   …

    Linux干貨 2017-01-10
  • 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限 答:     復制目錄:cp -R /etc/skel /home/tuser1     修改權限:chmod -R go=- /home/tuser1 2、編輯/etc/group文件…

    Linux干貨 2016-12-07
  • Linux下搭建路由器

    客戶端1:CentOS6.9 客戶端2:CentOS7.3 路由器:router1(CentOS7.3)、router2(CentOS7.3) r router3(CentOS7.3) 1 準備工作 為了避免干擾,最好建立獨立的網絡。 打開VMvare的虛擬網絡編輯器,點擊添加網絡按鈕,添加VMnet11并且將左下角使用“本地DHCP服務將IP地址分配給虛擬…

    Linux干貨 2017-08-20
  • RAID 0 軟件實現

    RAID 0 軟件實現        RAID 0又稱為Stripe或Striping,它代表了所有RAID級別中最高的存儲性能。RAID 0提高存儲性能的原理是把連續的數據分散到多個磁盤上存取,這樣,系統有數據請求就可以被多個磁盤并行的執行,每個磁盤執行屬于它自己的那部分數據請求。這種數據上的并行…

    Linux干貨 2017-05-02
  • Linux終端類型介紹

    相關命令:tty 適合閱讀人群:所有   終端機 終端(Computer terminal),是一臺電子計算機或者計算機系統,用來讓用戶輸入數據,及顯示其計算結果的機器。又名終端機,它與一部獨立的電腦不同,其實就是一種輸入輸出設備,一臺電腦多人使用,每增加一個用戶只須增加一臺顯示器和一套鍵盤鼠標就可以成為一個獨立的終端,多用戶可同時使用互相獨立,跟…

    Linux干貨 2016-10-14
  • 編輯器之神VS神之編輯器

      在linux下有兩款非常棒的處理器,它們的功能異常的強大,在普通使用者手中,我們或許僅僅把它們當做文本處理器,但在官方文檔中,它們不僅僅被定義為開發工具。正如在windows下,office在我們手中僅僅是文本,表格,PPT等文件的處理工具,而在大神手中,Excel是可以用來作畫的!PowerPoint 還可以用來播放視頻!  &nb…

    Linux干貨 2017-08-05

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 11:14

    總結的很棒,對進程管理基礎與命令介紹的很詳細哦。贊一個

欧美性久久久久