關於Linux下進程的詳解【進程查看與管理】

来源:https://www.cnblogs.com/ashjo009/archive/2019/11/23/11912563.html
-Advertisement-
Play Games

一、關於進程 進程: 已經啟動的可執行程式的運行實力 進程的組成:一個進程包含內核中的一部分地址空間和一系列數據結構。其中地址空間是內核標記的一部分記憶體以供進程使用,而數據結構則用來紀錄每個進程的具體信息。 最主要的進程信息包括: 進程的地址空間圖 進程當前的狀態( sleeping、stopped ...


一、關於進程

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

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

最主要的進程信息包括:

  • 進程的地址空間圖
  • 進程當前的狀態( 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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 瞭解DHCP協議工作原理 DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)提供了動態配置IP地址的功能。在DHCP網路中,客戶端不再需要自行輸入網路參數,而是由DHCP伺服器向客戶端自動分配。 IP地址租用的過程 IP租用請求 IP租用提供 IP租 ...
  • 回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" awk命令行結構和語法結構 awk命令行結構 其中: awk語法結構 awk語法結構即awk代碼部分的結構。 awk的語法充斥著 的模式,它們稱為awk rule。 例如: 上面示例中,有BEGIN語句塊,有END語句塊,還 ...
  • MySQL的DDL、DML、DQL語句和單表增、刪、改、查 [toc] 實驗準備: 1. 初始化設置過的centos虛擬機 2. 安裝MySQL資料庫 實驗開始: DDL語句 1. 創建和刪除資料庫 2. 查詢資料庫字元集 MariaDB [(none)] show create database ...
  • 回到: "Linux系列文章" "Shell系列文章" "Awk系列文章" 讀取文件的幾種方式 讀取文件有如下幾種常見的方式: 下麵使用Shell的read命令來演示前4種讀取文件的方式(第五種按位元組數讀取的方式read不支持)。 按字元數量讀取 read的 n選項和 N選項可以指定一次性讀取多少個 ...
  • 1- 在啟動grub菜單,選擇編輯選項啟動 ​ 2 - 按鍵盤e鍵,來進入編輯界面 ​ 3 - 找到Linux 16的那一行,將ro改為rw init=/sysroot/bin/sh ​ 4 - 現在按下 Control+x ,使用單用戶模式啟動 ​ 5 - 現在,可以使用下麵的命令訪問系統 chr ...
  • 轉載:關於FTP主動模式(active mode)與被動模式(passive mode)的工作原理: 主動模式(伺服器向客戶端敲門,然後客戶端開門)FTP:客戶機與伺服器之間建立連接時,客戶機是大於1024的埠上,伺服器是20埠。客戶機的埠是大於1024的,而伺服器的埠是21埠接收請求,而 ...
  • 1.下載所需安裝包: ​ 2.解壓到伺服器,編譯安裝: ​ 安裝中可能遇到的問題1 提示如下錯誤:/mnt/vdd/mod_bw.c: In function 'get_bw_rate':/mnt/vdd/mod_bw.c:567:59: error: 'conn_rec' has no membe ...
  • DNS簡介 DNS(Domain Name System)功能變數名稱系統: 是一種採用客戶端/伺服器機制,負責實現電腦名稱與IP地址轉換的系統。DNS作為一種重要的網路服務,既是國際互聯網工作的基礎,同時在企業內部網路中也得到了廣泛地應用。 DNS伺服器的作用 正向解析:根據主機名稱(功能變數名稱)查找對應的I ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...