主頁 > 作業系統 > 關于Linux下行程的詳解【行程查看與管理】

關于Linux下行程的詳解【行程查看與管理】

2020-10-04 04:19:13 作業系統

一、關于行程

  行程: 已經啟動的可執行程式的運行實力

  行程的組成:一個行程包含內核中的一部分地址空間和一系列資料結構,其中地址空間是內核標記的一部分記憶體以供行程使用,而資料結構則用來紀錄每個行程的具體資訊,

最主要的行程資訊包括:

  • 行程的地址空間圖
  • 行程當前的狀態( sleeping、stopped、runnable 等)
  • 行程的執行優先級
  • 行程呼叫的資源資訊
  • 行程打開的檔案和網路埠資訊
  • 行程的信號掩碼(指明哪種信號被屏蔽)
  • 行程的屬主
PID :行程 ID

每個行程都會從內核獲取一個唯一的 ID 值,絕大多數用來操作行程的命令和系統呼叫,都需要用 PID 指定操作的行程物件,

PPID :父行程 ID

在 Unix 和 Linux 系統中,一個已經存在的行程必須“克隆”它自身來創建一個新的行程,當新的行程克隆后,最初的行程便作為父行程存在,

UID & EUID:真實用戶 ID 和有效用戶 ID

一個行程的 UID 是其創建者的身份標志(也是對其父行程 UID 的復制),通常只有行程的創建者和超級用戶才有操作該行程的權限,
EUID 是一個額外的 UID,用來決定在任意一個特定時間點,一個行程有權限訪問的檔案和資源,對絕大多數行程而言,UID 和 EUID 是相同的(特殊情況即 setuid)

Niceness

一個行程的計劃優先級決定了它能獲取到的 CPU 時間,內核有一個動態的演算法來計算優先級,同時也會關注一個 Niceness 值,來決定程式運行的優先順序,

二、信號

  信號屬于行程級別的中斷請求,它們可以作為行程間通信的手段,或者由終端發送以殺死、中斷、掛起某個行程,

  Linux的信號串列:

[root@web ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX 

常用信號:

9)SIGKILL:用來立即結束程式的運行,本信號不能被阻塞、處理和忽略,

15)SIGTERM:程式結束(terminate)信號,與SIGKILL不同的是該信號可以被阻塞和處理,通常用來要求程式自己正常(優雅地)退出,shell命令kill預設產生這個信號,

19)SIGSTOP:停止(stopped)行程的執行,注意它和terminate以及interrupt的區別:該行程還未結束,只是暫停執行,本信號不能被阻塞、處理或忽略,

三、ps命令

  簡介:ps 命令就是最根本相應情況下也是相當強大地行程查看命令.運用該命令可以確定有哪些行程正在運行和運行地狀態、 行程 是否結束、行程有沒有僵死、哪些行程占用了過多地資源等等.總之大部分資訊均為可以通過執行該命令得到

  命令常用引數:ps【選項】

-e 顯示所有行程,環境變數
-f 全格式
-h 不顯示標題
-l 長格式
-w 寬輸出
a
顯示終端上地所有行程,包括其他用戶地行程

  命令使用案例:

列出所有行程:

[root@web ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.7 190900  3796 ?        Ss   09:28   0:01 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    09:28   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   09:28   0:00 [kworker/0:0H]
root          5  0.0  0.0      0     0 ?        S    09:28   0:00 [kworker/u256:
root          6  0.0  0.0      0     0 ?        S    09:28   0:00 [ksoftirqd/0]
[root@web ~]# ps ef
   PID TTY      STAT   TIME COMMAND
   918 pts/0    Ss     0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/lo
   949 pts/0    S      0:00  \_ bash XDG_SESSION_ID=4 HOSTNAME=172.16.234.111 TE
  1258 pts/0    R+     0:00      \_ ps ef XDG_SESSION_ID=4 HOSTNAME=172.16.234.1

列出類似行程樹的程式:

[root@web ~]# ps axjf
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
     0      2      0      0 ?            -1 S        0   0:00 [kthreadd]
     2      4      0      0 ?            -1 S<       0   0:00  \_ [kworker/0:0H]
     2      5      0      0 ?            -1 S        0   0:00  \_ [kworker/u256:
     2      6      0      0 ?            -1 S        0   0:00  \_ [ksoftirqd/0]
     2      7      0      0 ?            -1 S        0   0:00  \_ [migration/0]

 

-l : 列出和當前用戶有關的行程   -u 用戶 : 查看某一用戶的行程狀態

行程的五種狀態碼表示:

  • D 不可中斷(收到信號不喚醒和不可運行, 行程必須等待直到有中斷發生) 
  • R 運行(正在運行或在運行佇列中等待)
  • S 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
  • T 停止(行程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行運行
  • Z 僵死(行程已終止, 但行程描述符存在, 直到父行程呼叫wait4()系統呼叫后釋放)

ps -aux 引數解釋

  • %CPU:占用的CPU使用率
  • %MEM:占用的記憶體 / 記憶體使用率
  • VSZ:占用虛擬記憶體 / 記憶體大小
  • RSS:占用的記憶體 / 記憶體大小
  • TTY:終端的次要裝置號碼 / 線路
  • STAT:該行程的狀態
  • START:行程開始時間
  • TIME:執行的時間
  • COMMAND:所執行的指令

注:在 STAT 欄目中:

  1. < 表示高優先級
  2. n 表示低優先級
  3. s 包含子行程
  4. + 位于后臺的行程組

四、top命令

查看實時的行程狀態,實作動態監控行程,top 命令可以實時顯示系統當前活躍行程的總體資訊及其占用的資源,

top - 16:21:00 up  6:52,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   479664 total,   268788 free,    98624 used,   112252 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   362524 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
   407 root      20   0       0      0      0 S  0.3  0.0   0:01.19 xfsaild/dm+
     1 root      20   0  190900   3796   2584 S  0.0  0.8   0:02.00 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:+
     5 root      20   0       0      0      0 S  0.0  0.0   0:00.57 kworker/u2+
     6 root      20   0       0      0      0 S  0.0  0.0   0:00.74 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0

top 命令的 -d 選項可以指定資訊重繪的時間間隔,同時還有一些常用的互動命令

  • K:殺死一個行程,后面接行程的PID和指定需要處理的信號;默認值為15,強制殺死行程為9
  • M:按駐留記憶體使用率大小排序
  • P:按CPU使用率百分比大小排序
  • q:退出top程式
  • s:修改兩次資訊重繪的時間間隔,默認單位為秒
  • W:將當前設定寫入~/.toprc檔案中

top命令一些資訊欄位含義:

1.系統運行時間和負載情況:
top - 10:45:08 up  1:19,  2 users,  load average: 0.00, 0.01, 0.05
  1. 系統當前時間
  2. 系統已運行的時長
  3. 登陸用戶數量
  4. 系統在5分鐘、10分鐘、15分鐘的負載情況;

注意 load average資料是每隔5秒鐘檢查一次活躍的行程數,然后按特定演算法計算出的數值,如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了

 

2.任務:
Tasks:  97 total,   1 running,  96 sleeping,   0 stopped,   0 zombie

Task-任務,分別顯示任務行程的總數量以及正在運行、睡眠、停止、僵死的行程數

3.CPU狀態:
%Cpu(s):  1.0 us,  1.0 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us:用戶空間占用CPU的百分比
  • sy:系統空間占用CPU的百分比
  • ni:改變過優先級的行程占用CPU的百分比
  • id:空閑CPU的百分比
  • wa:IO等待占用CPU的百分比
  • hi:處理硬體中斷的CPU時間(Hardware IRQ)
  • si:處理軟體中斷的CPU時間(Software Interrupts)
  • st:這個虛擬機被hypervisor偷去的CPU時間(譯注:如果當前處于一個hypervisor下的vm,實際上hypervisor也是要消耗一部分CPU處理時間的)

注:在這里CPU的使用比率和windows概念不同,如果你不理解用戶空間和內核空間——>傳送門:https://www.cnblogs.com/sparkdev/p/8410350.html

4.記憶體使用:
KiB Mem :   479664 total,   278252 free,    89548 used,   111864 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   371568 avail Mem
第一行是物理記憶體使用,第二行是虛擬記憶體使用(交換空間) 記憶體顯示以KB為單位,物理記憶體顯示如下:全部可用記憶體、空閑記憶體、已使用記憶體、緩沖記憶體, 交換部分顯示的是:全部、空閑、已使用、總的可使用記憶體,
5.各行程任務狀態監控:
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
     1 root      20   0   43400   3736   2568 S  0.0  0.8   0:01.71 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
     4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker+

PID:行程ID,行程的唯一識別符號

USER:行程所有者的實際用戶名,

PR:行程的調度優先級,這個欄位的一些值是'rt',這意味這這些行程運行在實時態,

NI:行程的nice值(優先級),越小的值意味著越高的優先級,負值表示高優先級,正值表示低優先級

VIRT:行程使用的虛擬記憶體,行程使用的虛擬記憶體總量,單位kb,VIRT=SWAP+RES

RES:駐留記憶體大小,駐留記憶體是任務使用的非交換物理記憶體大小,行程使用的、未被換出的物理記憶體大小,單位kb,RES=CODE+DATA

SHR:SHR是行程使用的共享記憶體,共享記憶體大小,單位kb

S:這個是行程的狀態,它有以下不同的值:

  • D - 不可中斷的睡眠態,
  • R – 運行態
  • S – 睡眠態
  • T – 被跟蹤或已停止
  • Z – 僵尸態

%CPU:自從上一次更新時到現在任務所使用的CPU時間百分比,

%MEM:行程使用的可用物理記憶體百分比,

TIME+:任務啟動后到現在所使用的全部CPU時間,精確到百分之一秒,

COMMAND:運行行程所使用的命令,行程名稱(命令名/命令列)

還有許多在默認情況下不會顯示的輸出,它們可以顯示行程的頁錯誤、有效組和組ID和其他更多的資訊,


 

參考:

https://www.cnblogs.com/zhoug2020/p/6336453.html

https://www.cnblogs.com/ftl1012/p/top.html


 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/153325.html

標籤:Linux

上一篇:BootStrap

下一篇:Linux:DNS服務器搭建

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more