Linux進程管理及進程管理工具的使用


Linux的進程管理shell

進程:簡單來講就是一個運行中的程序的副本,是進程的一個實例,它是有生命週期的服務器

進程的建立:進程都是由其父進程建立的,最開始的進程就是init網絡

進程優先級:0-139session

實時優先級:1-99多線程

靜態優先級:100-139,對於靜態來講數字越小優先級越高,app

    優先級還有一個Nice值,值爲-20(對應100),19(對應19),能夠經過調整Nice值來調整優先級。socket

進程分爲守護進程和前臺進程,守護進程就是在系統引導過程當中啓動的進程,跟終端無關的進程;前臺進程跟終端有關,經過終端啓動的進程。(也能夠把前臺進程送日後臺以守護進程運行)tcp

  進程狀態:ide

    運行狀態:running工具

    就緒態:ready

    睡眠態:有分爲可中斷interruptablesleeping;不可中斷uninterruptable sleeping

    中止態:stopped,暫停於內存中,但不會被調度,除非手動啓動之

    僵死態:zombie

Linux中進程查看及管理的工具備pstree pstophtopglancesdstatvmstat

Linux系統各進程的相關信息都保存在/proc/PID目錄下的各文件中,各類查看工具也是讀取這裏面的信息,顯示爲咱們更好理解的信息

(1)      pstree命令:查看進程樹的

CentOS6的顯示結果,能夠看到init是最開始是的進程

wKiom1XupW2iPXvuAAGj-IUq8WI691.jpg

CentOS7中查看的以下,不是init了而是systemd

wKiom1XupXiRuXqEAAHYEK-2vUc572.jpg

 

(2)      ps命令:查看進程的運行狀態信息等,仍是一個至關強大的命令

支持兩種風格,帶‘-’和不帶‘-’的

  參數:

    -a:與終端相關的進程

    -e:顯示全部進程

    -f:顯示完整格式程序信息

    -u:以用戶爲中心組織進程狀態的信息顯示

    -x:與終端無關的進程

    -F:顯示完整格式的進程信息

    -H:以進程層級格式顯示進程相關信息

    經常使用組合:-aux-ef-eFH-axo

  還可使用-eo{pid, tid,class,rtprio,ni,pri,psr,pcpu,stat,comm}                          axo{stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm}

顯示本身指定須要的信息;niNice值,pri:優先級,rtprio:實時優先級

  ps  -aux顯示的信息有如下幾列

    USER:用戶名;PID:進程號;%CPUCPU利用率;%MEM:內存使用率;

    VSZVirtual  memory Size,虛擬內存集(虛擬地址大小);RSSReSident Size,常駐內存集(物理內存大小);TTY:是否與終端有關,?表示無關

    STAT:進程狀態

        RrunningSinterruptable  sleepingDuninterruptablesleeping

          TstoppedZzombie(父進程會替子進程收屍);x:死亡狀態

          +:前臺進程;l:多線程進程;N:低優先級進程;<:高優先級進程;

       ssession leader,某一個會話的leader進程

    START:開始時間

    TIME:用掉用的CPU時間

    COMMAND:所執行的命令

    wKioL1XuqBqg4sKEAAPdTAgCbCA117.jpg

wKioL1XuqCeR34EMAAPAoP_Yezo037.jpg

ps –ef

wKiom1XupgrROgY2AADmS1gxITk366.jpg

(3)      pgrep:完成進程管理信息的過濾;pkill:殺死進程的;

    兩個命令的用法格式相近,放在一塊說明

   語法格式:pgrep [options]pattern(用戶名);pkill [options] pattern

     參數:

    -u uid:effective user 有效用戶ID

     -U uid: real user    實際的用戶ID

     -t terminal: 與指定終端相關的進程

     -l: 顯示進程名,

     -a: 顯示完整格式的進程名

     -P pid: 顯示其父進程爲此處指定的進程的進程列表

pgrep  – u root –l

wKioL1XuqHHBjeZsAADQod8ms84357.jpg

wKiom1XuplDyLLgzAADdFmTsHIw090.jpg

(4)      pidof:根據進程名獲取進程的ID

wKioL1XuqIfBTPb-AABg1hzUUfY688.jpg

以上命令顯示的都是進程的靜態信息

下面是顯示進程動態信息的命令

(5)      top:動態刷新顯示進程的信息,是一個交互式的進程狀態實時查看工具

wKiom1XupmSgqXu8AATOmN2QCZI610.jpg

  默認排序是CPU的利用率

    排序:

       P:以佔據的CPU百分比;

       M:佔據內存百分比;

           T:累積佔據CPU時長;

    首部信息顯示:

        uptime信息:l命令(顯示或不顯示)

        tasks(進程樹)及cpu信息:t命令

        cpu分別顯示:1 (數字)

        memory信息:m命令

        退出命令:q

        修改刷新時間間隔:s

        終止指定進程:k

    選項:

       d #: 指定刷新時間間隔,默認爲3秒;

       -b: 以批次方式;

       -n #: 顯示多少批次;

wKioL1XuqLLi1VQMAAHCd4sg0rk319.jpg

                                     wKiom1XupqHTfQyTAAJRhdkaoyU551.jpg

                           

(6)      htop:是基於文本模式的、交互式的進程查看器,主要用於控制檯或shell中,是top的高級版

這個工具在系統中通常不是默認安裝的,須要本身進行安裝,使用yum進行安裝就能夠了(若是不會看本人之前的博客,或網上搜索下)

經常使用選項:

F1 : 查看htop使用說明;F2 : 設置;F3 : 搜索進程;F4 : 過濾器,按關鍵字搜索;      

F5 : 顯示樹形結構;F6 : 選擇排序方式;F7 : 減小nice值,這樣就能夠提升對應進程的優先級;     F8 : 增長nice值,這樣能夠下降對應進程的優先級;F9 : 殺掉選中的進程;F10 : 退出htop或者q退出;

搜索選項:

    l :顯示進程打開的文件: 若是安裝了lsof,按此鍵能夠顯示進程所打開的文件;  

    u :顯示全部用戶,並能夠選擇某一特定用戶的進程;      

    s : 將調用strace追蹤進程的系統調用;        

    t : 顯示樹形結構;        

    H :顯示/隱藏用戶線程;       

    I :倒轉排序順序;       

    K :顯示/隱藏內核線程;           

    M :按內存佔用排序;       

    P :按CPU排序;          

    T :按運行時間排序;        

    上下鍵或PgUP, PgDn : 移動選中進程;       

    左右鍵或Home, End : 移動列表;       

    Space(空格) : 標記/取消標記一個進程;

命令能夠做用於多個進程


使用時,直接htop回車就能夠了

wKiom1Xup7qgARgoAAbKExqEups013.jpg

F2能夠設置要顯示信息內容

wKioL1Xuqf_zqsVEAAI0DZEIoY4702.jpg

    -d #: 指定延遲時間;

    -u UserName: 僅顯示指定用戶的進程;

     -s COLOMN: 以指定字段進行排序;

  命令:

    s:跟蹤選定進程的系統調用;

   wKioL1XuqlfhPA5SAADACWDNrvA693.jpg

    l:顯示選定進程打開的文件列表;

wKiom1XuqEbBYXouAAOeHbopFVw722.jpg

        a:將選定的進程綁定至某指定CPU核心;

        t:顯示進程樹

wKiom1XuqJvi1H5eAASFVSWbC4Q495.jpg

    

    


(7)      vmstat命令:對操做系統的虛擬內存、進程、CPU活動進行監控,它對系統的總體狀況進行統計  命令使用格式:

    vmstat [options] [delay [count]]

         選項:-s:顯示內存的統計數據

wKioL1XurNuyymJRAADFg2t6c-M988.jpg

wKioL1XurOfiCPCjAADxHvnyMoo269.jpg

顯示的信息的解釋:

procs:

 r:等待運行的進程的個數;

 b:處於不可中斷睡眠態的進程個數;(被阻塞的隊列的長度)

memory

 swpd: 交換內存的使用總量;

 free:空閒物理內存總量;

 buffer:用於buffer的內存總量;

 cache:用於cache的內存總量;

swap:

 si:數據進入swap中的數據速率(kb/s)

 so:數據離開swap中的數據速率(kb/s)

io

 bi:從塊設備讀入數據到系統的速率;(kb/s)

 bo: 保存數據至塊設備的速率;

system

 in: interrupts, 中斷速率;

 cs: context switch, 進程切換速率;

cpu

 us:用戶進程執行時間(user time)

 sy:系統進程執行時間(system time)

 id:空閒時間(包括IO等待時間),中央處理器的空閒時間 。以百分比表示。

 wa:等待IO時間


(8)      pmap命令:顯示一個進程的內存映射

           語法格式:

pmap [options] pid [...]

              -x: 顯示詳細格式的信息;

           pmap查看的信息,能夠經過另一種方法實現:

                 #cat /proc/PID/maps

wKioL1XurgXSm7U-AAM-g_Q0i5g512.jpg

(9)      glances命令:在用戶的終端上實時動態的顯示重要的系統數據和變化。顯示的數據包括:CPU、內存、磁盤、網絡等使用狀況,內核、運行隊列、負載、I/O 狀態、消耗資源最多的進程等等

    Glances 能夠單機使用,也能夠客戶端-服務器模式多機使用。單機使用很簡單,直接運行就能夠了:


    客戶端-服務器模式稍微複雜一點,須要在一臺機器上以服務器模式啓動 glances -s,另一臺機器以客戶端模式鏈接 glances -c. 好比在有兩臺機器 A 和 B 都裝了 glances,要想在 A 上看 B 上的 glances 的話須要事先在 B 上用服務器模式啓動 glances(假設 B 的 IP 地址是 172.16.100.18):

    # glances -s

而後再從 A(客戶端)用 Glances 訪問 B(服務器):

    # glances -c 172.16.100.18

glances命令格式:

    glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

 經常使用的選項:

    -b: Byte爲單位顯示網卡數據速率;

    -d: 關閉磁盤I/O模塊;

    -f/path/to/somefile: 設定輸入文件位置;

    -o{HTML|CSV}:輸出格式;

    -m: 禁用mount模塊

    -n: 禁用網絡模塊

    -t #: 延遲時間間隔

    -1:每一個CPU的相關數據單獨顯示;

    
glances

wKiom1Xuq-fD8BDbAAUXhlHyZOU261.jpg

其中顯示的字段的意義以下:

    VIRT: 虛擬內存大小
    RES: 進程佔用的物理內存值
    %CPU:該進程佔用的 CPU 使用率
    %MEM:該進程佔用的物理內存和總內存的百分比
    PID: 進程 ID 號
    USER: 進程全部者的用戶名
    TIME+: 該進程啓動後佔用的總的 CPU 時間
    IO_R 和 IO_W: 進程的讀寫 I/O 速率
    NAME: 進程名稱
    NI: 進程優先級
    S: 進程狀態,其中 S 表示休眠,R 表示正在運行,Z 表示僵死狀態。

使用h查看裏面的內建命令

wKioL1XurwKRizCUAALidCsw1AY389.jpg

交互界面下可使用的快捷鍵的功能以下:

h : 顯示幫助信息
q : 離開程序退出
c :按照 CPU 實時負載對系統進程進行排序
m :按照內存使用情況對系統進程排序
i:按照 I/O 使用情況對系統進程排序
p: 按照進程名稱排序
d : 顯示磁盤讀寫情況
w : 刪除日誌文件
l :顯示日誌
s: 顯示傳感器信息
f : 顯示系統信息
1 :輪流顯示每一個 CPU 內核的使用狀況(次選項僅僅使用在多核 CPU 系統)

(10)  dstat命令:動態顯示CPU,disk,net,page,system負載狀況等

  語法格式:

    dstat [-afv] [options..] [delay [count]]

       經常使用選項:

        -c: 顯示cpu相關信息;

-C #,#,...,total

-d: 顯示disk相關信息;

-D total,sda,sdb,...

-g:顯示page相關統計數據;

-m: 顯示memory相關統計數據;

-n: 顯示network相關統計數據;

-p: 顯示process相關統計數據;

-r: 顯示io請求相關的統計數據;

-s: 顯示swapped相關的統計數據;

    

    --top-cpu:顯示最佔用CPU的進程;

--top-io: 顯示最佔用io的進程;

--top-mem: 顯示最佔用內存的進程;

--top-lantency: 顯示延遲最大的進程;

    --ipc 顯示ipc消息隊列,信號等信息

    --socket 用來顯示tcp udp端口狀態

    -a all 此爲默認選項 等同於 -cdngy

    -v vmstat 等同於 -pmgdsc -D total

    --output 文件 此選項也比較有用,能夠把狀態信息以csv的格式重定向到指定的文件中,以便往後查看

 wKiom1Xur0rB3EGHAANrefqB1d0281.jpg

 wKiom1XushihTHulAAFap9S-R7Q303.jpg


 wKiom1XusovAaWTuAAJ5src2iQw365.jpg

(11)  kill命令:向進程發送控制信號,以實現對進程管理

          顯示當前系統可用信號:

             # kill –l

             # man 7 signal

       經常使用信號:

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

          2) SIGINT: 停止正在運行的進程;至關於Ctrl+c

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

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

        18) SIGCONT

        19) SIGSTOP

      指定信號的方法:

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

        (2) 信號完整名稱;SIGHUP

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

      向進程發信號:

          kill [-SIGNAL] PID...

     終止「名稱」之下的全部進程:

          killall[-SIGNAL] Program


上面重要的是tophtopglancesdstat的使用,若是想查看這幾個命令的更詳細的操做,使用man命令。