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

C 語言實戰技巧:透過 /proc 檔案系統檢視行程 main 函式參數

     編輯:關於C語言

C 語言實戰技巧:透過 /proc 檔案系統檢視行程 main 函式參數

在 Linux 環境開發除錯時,若需在程式執行期間查看 main(int argc, char *argv[]) 接收的命令列參數,不想修改原始碼重新編譯,可善用 /proc 虛擬檔案系統。本技巧屬「一起 talk C 栗子吧」系列第 127 回內容。

一、核心概念

  • /proc:Linux 核心暴露行程資訊的虛擬檔案系統
  • 每個行程對應 /proc/PID/ 目錄(PID 為行程識別碼)
  • /proc/PID/cmdline:儲存該行程完整命令列參數(以 \0 分隔)

二、實戰步驟

1. 撰寫測試程式

// test_args.c
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int i = 0;
    while (i++ < argc * 3) sleep(1);  // 保持執行足夠時間供檢視
    return 0;
}

2. 編譯並背景執行

gcc test_args.c -o test_args
./test_args -a -b &      # 背景執行,傳遞 -a -b 兩個參數
# 輸出範例:[1] 3231  (3231 為 PID)

3. 檢視命令列參數

cat /proc/3231/cmdline
# 輸出:./test_args-a-b  (參數間以 \0 分隔,cat 顯示為連續字串)

若需可讀格式:

cat /proc/3231/cmdline | tr '\0' ' '
# 輸出:./test_args -a -b

三、進階技巧:/proc/self 自動鎖定當前行程

在 Shell 或程式中,self 符號連結自動指向目前行程的目錄:

cat /proc/self/cmdline
# 直接顯示當前指令的參數,無需查詢 PID

四、對比:傳統程式碼列印法 vs /proc 法

維度程式碼列印 (printf argv)/proc 檢視法
需修改原始碼是否
需重新編譯是否
適用執行中行程否(除非預留信號處理)是
適用無原始碼程式否是
參數格式自定義原始 \0 分隔

五、適用場景

  1. 線上服務異常,需快速確認啟動參數
  2. 第三方程式無原始碼,需分析啟動配置
  3. 自動化腳本驗證部署參數正確性
  4. 容器環境檢視入口點參數

六、延伸:/proc/PID/ 其他實用檔案

  • environ:環境變數(\0 分隔)
  • status:行程狀態、記憶體使用、執行緒數、信號遮罩等
  • fd/:開啟檔案描述符連結
  • maps:記憶體映射區段
  • stack:堆疊內容(需權限)

善用 /proc 檔案系統,能在不干擾執行中程式的前提下,快速獲取關鍵診斷資訊,是 Linux 系統程式開發者與運維人員的必備技能。

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