Linux進程管理常見命令pstree top

Linux進程管理常見命令pstree top

進程相關概念

  • 內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等

  • 進程(process)定義

    進程=程序+數據+進程控制塊PCB(線性、索引、鏈表)

    廣義:是計算機中一個具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。

    狹義:是正在運行的程序的實例。

  • 進程特點:①是一個實體,每個進程都有自己的地址空間(文本區、數據區、堆棧)。②是一個"運行中的程序"的副本,載入內存的活動的實體。是區別於程序是靜態的一組指令的集合。③進程有生命週期,由操作系統來調度。④進程具有併發性和共享性等性質⑤進程對文件系統的訪問權限取決於進程發起者和上下文語境決定

  • 進程的創建

    init:第一個進程(父進程)

  • 進程三種重要狀態和轉換

    進程三態轉換B.png

    1、運行態Running:正在被CPU調度執行

    2、阻塞態Blocked:等待某種條件滿足前,暫時無法運行。

    3、就緒態Ready:所有資源已齊備,等待分配CPU立即執行(萬事俱備,只欠CPU)

    4、睡眠態:

                    可中斷:interruptable

                    不可中斷:uninterruptable

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

     6、僵死態:zombie,

  • 進程類型:

    1、守護進程: daemon,在系統引導過程中啓動的進程,和終端無關進程

    2、前臺進程:與終端相關,通過終端啓動的進程

    兩者可相互轉化

    A、CPU-Bound:CPU密集型,非交互

    B、IO-Bound:IO密集型,交互

    I、系統進程:Kernel 系統空間

    II、用戶進程:用戶空間

    進程在系統中用唯一的ID(非負)標識,進程結束後ID被其他進程重用。

    PID 0:調度進程,內核一部分,系統進程

    PID 1:  init進程,普通用戶進程,超級用戶特權運行

    PID 2:  頁守護進程,虛擬存儲分頁操作

  • 進程調度方式及算法

    1、搶佔式:

    2、非搶佔式:

    先來先服務(FCFS)和短作業優先、高優先權優先、基於時間片的輪詢、多級反饋隊列算法

  • 線程

    操作系統調度的基本單位;

    不擁有資源,共享同一進程資源,切換速度快開銷小;

    一個進程至少有一個線程,且是它的主線程

LRU算法

Least Recently Used最近最少使用,根據歷史訪問記錄來淘汰數據,核心思想是“如果數據最近被訪問過,將來被訪問的機率也更高”。採用鏈表保存緩存數據:新數據插到表頭,當命中將數據移至表頭,表滿淘汰尾部數據。

LRU算法A.png

進程優先級

實時優先級:0-99

非實時優先級:100-139

系統優先級A.png

Centos優先級B.png

nice值:-20~19 共40級,值越高,優先級越低;靜態優先級,renice 修改纔會變;

靜態優先級100~139

進程默認啓動時的nice值爲0,優先級爲120

只有root用戶才能調整nice值來提高優先級

renice -10 ping 127.0.0.1

chrt 可以調整實時優先級

線程

        1、單個進程中執行中每個任務就是一個線程,線程是進程中執行運算的最小單位。

        2、一個進程可以擁有多個線程,一個線程只能屬於一個線程

        3、線程沒有地址空間,線程包含在進程的地址空間中。

        4、操作系統通過多線程併發處理,來提高事務效率。

IPC進程間通信

  • 同一主機:pipe |  管道

                     socket 套接字

                     signal  信號

                     shm  共享內存

  • 不同主機:

                 socket  IP+port 網絡通信

                 RPC 遠程過程調用

                 MQ  消息隊列的

系統管理工具
Linux系統狀態查看、管理主要工具有:pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup

pstree命令

以樹狀圖的方式直觀展示進程之間的父子關係。   

      pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]

      常用選項:

       -a 顯示每個程序的完整指令,包含路徑、參數等

       -c 禁用相同子樹的壓縮。默認相同子樹會被壓縮精簡顯示。

       -n 按進程PID數值從小到大排序(相同父進程的子進程也會依此排序),默認按進程名asccii碼值排序

       -p 顯示進程和PID

        pstree -ps #PID :顯示該PID進程的父子關係(centos7獨有)

       -u 顯示用戶名

       -g 顯示PGIDs。如果同時PIDs和PGIDs,則PIDS優先(centos7獨有)

ps命令

        ps [OPTION]

        report a snapshot of the current processes

        Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

        支持三種風格的OPTION:

        UNIX選項  ~]#ps -a

        BSD選項    ~]#ps a

        GNU選項   ~]#ps --user

1、ps選項:默認什麼都不加 ps ,顯示當前終端中的進程

  • a   包括所有終端中的進程

  • x   包括不鏈接終端的進程(跟終端無關的,如有些開機自動運行的進程)

  • u   顯示進程所有者的信息

  • f   顯示進程樹,相當於--forest(可以看到父進程,效果不如pstree -p 直觀)

  • k|--sort  屬性 對屬性排序,屬性前加- 表示倒序

  • o  屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem (只顯示自己關心的指定信息)

  • L 顯示支持的屬性列表 (eg:ps L  表示ps支持哪些屬性給你打印出來)

        ps axo pid,%cpu,%mem,cmd --sort %cpu效果等同

        ps axo pid,%cpu,%mem,cmd k %cpu

2、PS常見選項

  • -C cmdlist 指定命令,多個命令用,分隔 (ps hello.sh例子中,使用/bin/bash hello.sh方式運行或者hello.sh腳本沒有蛇棒機制的第一行。使用ps -C hello.sh 去查看進程是否有hello.sh這個命令時就查詢不到。)

  • -L 顯示線程 (注意與上面ps L 區別,這裏是 ps -L)

  • -e: 顯示所有進程,相當於-A

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

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

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

    -u userlist  指定有效的用戶ID或名稱

    -U userlist 指定真正的用戶ID或名稱

    -g gid或groupname  指定有效的gid或組名稱

    -G gid或groupname  指定真正的gid或組名稱

    -p pid 顯示指pid的進程

    --ppid pid  顯示屬於pid的子進程

    -M  顯示SELinux信息,相當於Z

    如:vmtoolsd(6193,6193)───{vmtoolsd}(6262,6193),這樣有花括號的就是線程,小括號的就是進程。

3、PS輸出屬性

  1. VSZ:Virtual memory SiZe,虛擬內存集,線性內存

  2. RSS:ReSident Size, 常駐內存集

  3. STAT:進程狀態

        R:running

        S: interruptable sleeping

        D: uninterruptable sleeping

        T: stopped

        Z: zombie

        +: 前臺進程

        l : 多線程進程

        L:內存分頁並帶鎖

        N:低優先級進程

        <: 高優先級進程

    s: session leader,會話(子進程)發起者

    ps axo pid,cmd,user,ruser,nice,pri,rtprio 比較系統優先級,實時優先級,nice優先級,容易混淆

常用組合

     ps aux | axo | -ef | -eFH | -eo

    結合watch命令實時監控:watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head' 

    結合grep命令:ps aux | grep httpd

pgrep命令

    增強版的 "ps 選項 | command",功能更豐富,支持:

①預定義模式:

    pgrep [options] pattern 

          -u uid: effective user,生效者 

          -U uid: real user,真正發起運行命令者 

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

          -l: 顯示進程名 

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

          -P pid: 顯示指定進程的子進程 

②按確切的程序名稱

          pgrep pidof bash

uptime和w

uptime:顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(1、5、15分鐘的平均負載,一般不會超過1) 

w:比uptime更豐富的系統狀態信息

常用選項

    -f  開啓或關閉顯示用戶從何處登入系統。

    -h  不顯示各欄位的標題信息列。

    -l  使用詳細格式列表,此爲預設值。

    -s  使用簡潔格式列表,不顯示用戶登入時間,終端機階段作業和程序所耗費的CPU時間。

    -u  忽略執行程序的名稱,以及該程序耗費CPU時間的信息。

04:27:43 up  7:02,  1 user,  load average: 0.00, 0.01, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/1    192.168.111.1    02:08    7.00s  0.27s  0.02s w

格式解讀:

第一行含義同uptime

第二行:

    USER:顯示登錄系統的用戶名

    TTY:用戶登錄的終端類型/號

    FORM:顯示用戶從何處登錄的,本地登錄(centos6是-;centos7是空的),遠程登錄則顯示遠程IP或主機名

    LOGIN@:用戶登錄系統是在什麼時間

    IDLE:用戶閒置時間。一旦執行操作,此計時器將重置。

    JCPU:以終端的代號區分顯示,表示該終端所有相關的進程(process)執行時所消耗的cpu時間。每當進程結束就停止計時,開始新的進程則會重新計時。

    PCPU:表示CPU執行程序耗時。

    WHAT:用戶正在執行的程序名

top命令

動態顯示系統狀態信息

VIRT:virtual memory usage 虛擬內存

RES:resident memory usage 常駐內存

SHR:shared memory 共享內存

1、欄位信息簡介

    us:用戶空間  

    sy:內核空間 

    ni:調整nice時間 

    id:空閒 

    wa:等待IO時間 

    hi:硬中斷  

    si:軟中斷(模式切換) 

    st:虛擬機偷走的時間 

2、排序:

       P:以佔據的CPU百分比,%CPU 

       M:佔據內存百分比,%MEM 

       T:累積佔據CPU時長,TIME+ 

       首部信息顯示: 

          uptime信息:l命令 

          tasks及cpu信息:t命令 

          cpu分別顯示:1 (數字) 

          memory信息:m命令 

       退出命令:q 

       修改刷新時間間隔:s 

       終止指定進程:k 

       保存文件:W 

3、選項:

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

        -b  全部顯示所有進程 

        -n #  刷新多少次後退出 

        -H   線程模式,示例:top -H -p `pidof mysqld` 

4、 htop命令:EPEL源

 選項: 

         -d #: 指定延遲時間; 

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

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

子命令: 

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

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

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

          t:顯示進程樹 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章