首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux 行程資訊完整查詢指南:/proc/self、ps 指令與 status 檔案深度解析

     編輯:關於C語言

Linux 行程資訊完整查詢指南:/proc/self、ps 指令與 status 檔案深度解析

承接上一篇「檢視 main 函式參數」,本文進一步介紹如何查詢行程的完整資訊(PID、狀態、記憶體、執行緒、信號等),屬「一起 talk C 栗子吧」系列第 128 回內容。

一、關鍵技巧:/proc/self 自動定位當前行程

cat /proc/self/cmdline
# 直接顯示當前 Shell/指令的命令列參數,無需知道 PID

self 為核心提供的魔術符號連結,永遠指向發起系統呼叫的行程目錄。

二、ps 指令快速概覽

ps -x
# 輸出範例:
# PID TTY STAT TIME COMMAND
# 2731 pts/1 Ss   0:00 bash
# 2943 pts/1 R+   0:00 ps -x
  • 列出所有屬於當前使用者的行程
  • 欄位:PID、終端機、狀態碼、CPU 時間、命令列
  • 常用參數:aux(所有行程詳細)、-ef(完整格式)、-T(顯示執行緒)

三、深度資訊來源:/proc/PID/status

cat /proc/self/status

關鍵欄位解析

欄位含義範例值
Name程式名稱cat
State行程狀態R (running) / S (sleeping) / D (disk sleep) / Z (zombie)
Tgid執行緒群組 ID(主執行緒 PID)2994
Pid行程 ID2994
PPid父行程 ID2731
Uid/Gid實際/有效/儲存/檔案系統 UID/GID1000 1000 1000 1000
VmPeak/VmSize虛擬記憶體峰值/目前大小5924 kB
VmRSS駐留記憶體大小(實體 RAM 佔用)540 kB
VmData/VmStk/VmExe資料段/堆疊/程式碼段大小160/136/44 kB
Threads執行緒數量1
SigQ排隊信號/最大佇列0/31070
CapEff/CapPrm/CapInh有效/允許/繼承能力位圖0000000000000000
Cpus_allowed允許執行的 CPU 核心位圖f (0-3)
voluntary_ctxt_switches自願上下文切換次數1
nonvoluntary_ctxt_switches非自願(被搶佔)切換次數1

四、status vs ps 選擇指南

需求推薦工具
快速列出所有行程 PID 與命令ps -ef / ps aux
查詢特定行程完整記憶體/執行緒/信號細節cat /proc/PID/status
腳本自動化解析/proc 格式固定,易於 grep/awk 處理
即時互動式監控top / htop / pidstat

五、程式設計中讀取 /proc 範例

// 取得自身 PID
pid_t pid = getpid();
// 組路徑讀取 status
char path[64];
snprintf(path, sizeof(path), "/proc/%d/status", pid);
FILE *fp = fopen(path, "r");
if (fp) {
    char line[256];
    while (fgets(line, sizeof(line), fp)) {
        if (strncmp(line, "VmRSS:", 6) == 0) {
            printf("RSS: %s", line + 7);
            break;
        }
    }
    fclose(fp);
}

六、容器環境注意事項

  • 容器內 /proc 可能被遮罩,PID 命名空間隔離導致宿主機 PID 不同
  • VmRSS 反映容器限制內的記憶體使用
  • 建議搭配 cgroup 檔案 (/sys/fs/cgroup/memory/) 獲取配額資訊

掌握 /proc、ps、status 三大查詢工具,能在開發、除錯、效能分析、容器運維等場景快速定位行程行為,是 Linux 系統級工程師的核心基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved