Linux進階之進程管理


本節內容

1、進程管理

2ps

3uptime

4top

5ss -tnl------ lsof -i :22




一、 進程管理的概念

程序:二進制文件,靜態 /bin/date/usr/sbin/sshd 

進程:是程序運行的過程,動態,有生命周期及運行狀態。

下圖所示的是進程的生命周期:

描述如下:

父進程復制自己的地址空間(fork  [fɔ:k] 分叉)創建一個新的(子)進程結構。每個新進程分配一個唯一的進程 IDPID),滿足跟蹤安全性之需。PID 和父進程 IDPPID)是子進程環境的元素,任何進程都可以創建子進程,所有進程都是第一個系統進程的后代。

centos56PID1的進程是:init  

centos7 PID1的進程是:systemd

進程類型:

僵屍進程:一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用waitwaitpid獲取子進程的狀態信息,那么子進程的進程描述符仍然保存在系統中。這種進程稱之為僵屍進程。

用自己的話表達:父進程退出了,子進程沒有退出,那么這些子進程就沒有父進程來管理了,就變成僵屍進程。

 交互進程:是由一個shell啟動的進程。交互進程既可以在前台運行,也可以在后台運行;

批量處理進程:這種進程和終端沒聯系,是個進程序列;

守護進程:在Linux系統啟動時啟動的進程,並在后台運行;

超級守護進程:系統啟動時由一個統一的守護進程xinet來負責管理一些進程,當相應請求到來時需要通過xinet的轉接才可以喚醒被xinet管理的進程。

二、進程的屬性 

進程IDPID):是唯一的數值,用來區分進程

進程狀態:狀態分為運行Rrunning、休眠Ssleep、僵屍Zzombie

三、使用ps查看進程工具

1ps查看進程工具

1:常用的參數:

a:顯示跟當前終端關聯的所有進程

u:基於用戶的格式顯示(U: 顯示某用戶ID所有的進程)

x:顯示所有進程,不以終端機來區分

          另一種ps查看進程的方法:ps -ef (查看內容簡潔) 

[root@renyz ~]# ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root          1  0.0  0.4 125568  4080 ?        Ss   09:04   0:05 /usr/lib/systemd/syste

root          2  0.0  0.0      0     0 ?        S    09:04   0:00 [kthreadd]

root          3  0.0  0.0      0     0 ?        S    09:04   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S<   09:04   0:00 [kworker/0:0H]

root          7  0.0  0.0      0     0 ?        S    09:04   0:00 [migration/0]

root          8  0.0  0.0      0     0 ?        S    09:04   0:00 [rcu_bh]

root          9  0.0  0.0      0     0 ?        R    09:04   0:01 [rcu_sched]

備注:

最后一列[xxxx] 使用方括號括起來的進程是內核態的進程。沒有括起來的是用戶態進程。

2、上面的參數輸出每列含意

USER:啟動這些進程的用戶

PID:進程的ID

%CPU:進程占用的CPU百分比; 

%MEM:占用內存的百分比; 

VSZ:進程占用的虛擬內存大小(單位:KB 

RSS:進程占用的物理內存大小(單位:KB 

STAT:該程序目前的狀態,Linux進程有5種基本狀態:

R :該程序目前正在運作,或者是可被運作;

S :該程序目前正在睡眠當中,但可被某些訊號(signal) 喚醒。

T :該程序目前正在偵測或者是停止了;

:該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態

:不可中斷狀態.  

5個基本狀態后,還可以加一些字母,比如:SsR+等,它們含意如下:

      <:表示進程運行在高優先級上

      N:表示進程運行在低優先級上

      L:表示進程有頁面鎖定在內存中

      s:表示進程是控制進程

       l:表示進程是多線程的

      +:表示當前進程運行在前台

START:該 process 被觸發啟動的時間;

TIME :該 process 實際使用 CPU 運作的時間。

COMMAND:該程序的實際指令

四、uptime查看系統負載

[root@renyz ~]# uptime

 18:33:55 up  9:29,  1 user,  load average: 0.00, 0.01, 0.05

彈出消息含意如下:

當前時間 系統運行時間 當前登錄用戶 系統負載1分鍾,5分鍾,15分鍾的平均負載

那么什么是系統平均負載呢? 系統平均負載是指在特定時間間隔內運行隊列中的平均進程數。

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

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

五、top命令 

top - 18:36:39 up  9:31,  1 user,  load average: 0.00, 0.01, 0.05

Tasks: 160 total,   2 running, 158 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   995896 total,    75692 free,   392760 used,   527444 buff/cache

KiB Swap:  2097148 total,  2097148 free,        0 used.   349284 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND           

     1 root      20   0  125568   4080   2612 S  0.0  0.4   0:05.21 systemd           

     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd          

     3 root      20   0       0      0      0 S  0.0  0.0   0:00.75 ksoftirqd/0       

     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H      

     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0       

     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh            

     9 root      20   0       0      0      0 R  0.0  0.0   0:01.44 rcu_sched         

    10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain

1行:系統時間、運行時間、登錄終端數、系統負載(三個數值分別為1分鍾、5分鍾、15分鍾內的平均值,數值越小意味着負載越低)。

2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。

3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。其中數據均為CPU數據並以百分比格式顯示,例如“97.1 id”意味着有97.1%CPU處理器資源處於空閑。

4行:物理內存總量、內存使用量、內存空閑量、作為內核緩存的內存量。

5行:虛擬內存總量、虛擬內存使用量、虛擬內存空閑量、已被提前加載的內存量。

6行:

PID — 進程id

USER — 進程所有者

PR — 進程優先級

NI — nice值。負值表示高優先級,正值表示低優先級

VIRT — 進程使用的虛擬內存總量,單位kbVIRT=SWAP+RES

RES — 進程使用的、未被換出的物理內存大小,單位kbRES=CODE+DATA

SHR — 共享內存大小,單位kb

S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程

%CPU — 上次更新到現在的CPU時間占用百分比

%MEM — 進程使用的物理內存百分比

TIME+ — 進程使用的CPU時間總計,單位1/100

COMMAND — 進程名稱(命令名/命令行)

六、lsof命令

lsof命令用於查看你進程打開的文件,打開文件的進程,進程打開的端口(TCPUDP)

-i<條件>:列出符合條件的進程。(46、協議、:端口、 @ip

[root@renyz ~]# ss -tnl  #lsof配合ss命令使用

State      Recv-Q Send-Q Local Address:Port               Peer Address:Port             

LISTEN     0      128              *:22                           *:*                  

LISTEN     0      128             :::22                          :::*                 

LISTEN     0      128            ::1:631                         :::*                 

LISTEN     0      100            ::1:25                          :::*                 

[root@renyz ~]# lsof -i :22

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

sshd    6973 root    3u  IPv4  44072      0t0  TCP *:ssh (LISTEN)

sshd    6973 root    4u  IPv6  44081      0t0  TCP *:ssh (LISTEN)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM