718 字
4 分钟
Linux /proc 结构
2025-05-14

/proc 目录结构#

/proc
├── 1
│   ├── cmdline
│   ├── cwd -> /
│   ├── environ
│   ├── exe -> /sbin/init
│   ├── fd/
│   ├── maps
│   ├── mountinfo
│   ├── root -> /
│   ├── stat
│   ├── statm
│   ├── status
│   └── task/
├── 2
├── 3
├── ...
├── self -> 1234      (指向当前进程的目录)
├── cpuinfo
├── meminfo
├── uptime
└── version

其中,顶层既有数字命名的目录(每个运行中进程的 PID),也有反映系统整体状态的文件或目录(如 cpuinfo、meminfo、uptime 等),以及特殊符号链接 self(指向调用进程自身的 PID 目录)。

单个进程结构#

/proc/1234/
├── cmdline        # 进程启动时的命令行参数(Command line)
├── cwd -> /home/lk/project  
│                  # 当前工作目录(Current Working Directory,符号链接)
├── environ        # 环境变量列表(Environment)
├── exe -> /usr/bin/python3  
│                  # 可执行文件路径(Executable,符号链接)
├── fd/            # 打开的文件描述符目录(File Descriptors)
│   ├── 0 -> /dev/pts/0
│   ├── 1 -> /dev/pts/0
│   └── 2 -> /dev/pts/0
├── maps           # 内存映射信息(Memory map)
├── mountinfo      # 挂载点信息(Mount information)
├── root -> /      # 进程的根目录(Root directory,符号链接)
├── stat           # 进程详细状态于一行文本(Process status)
├── statm          # 内存使用情况(Memory usage)
├── status         # 可读性更强的进程状态(Human-readable status)
└── task/          # 线程(tasks)子目录
    ├── 1234/
    └── 1235/      (其他线程的 PID 目录)

各文件/子目录#

  • cmdline 存储进程启动时的完整命令行参数,参数之间以 \0 分隔。
  • cwd 指向进程的当前工作目录(符号链接)。
  • environ 存放环境变量,每个条目以 KEY=VALUE\0 分隔。
  • exe 指向进程正在执行的可执行文件路径(符号链接)。
  • fd/ 目录内每个条目对应一个打开的文件描述符,条目名为数字(0=stdin,1=stdout,2=stderr…),内容是符号链接,指向实际打开的文件或设备。
  • maps 列出该进程的所有内存映射区域(包括共享库、堆、栈、匿名映射等),每行包含地址范围、权限、偏移、设备号、inode 及映射路径。
  • mountinfo 该进程命名空间中挂载点的详细信息,包括挂载源、挂载目标、文件系统类型和挂载选项。
  • root 指向进程根目录(符号链接,对容器或 chroot 环境尤为重要)。
  • stat 以固定格式输出一个长字符串,包含进程 PID、状态(R/S/D/T/Z)、父 PID、进程组、线程数、CPU 时间、内存使用等多项数值。
  • statm 给出进程使用的内存量,以页面数形式列出:总程序大小、驻留大小、共享大小等。
  • status 将 stat 中的信息以可读性更强的 “字段:值” 格式展示,并附加 VmRSS、VmSize、Uid、Gid 等。
  • task/ 该进程下所有线程(Lightweight process)的目录,每个线程有与主目录类似的结构,可查看线程各自状态。
Linux /proc 结构
https://blog.lpkt.cn/posts/linux-proc-stuct/
作者
lollipopkit
发布于
2025-05-14
许可协议
CC BY-NC-SA 4.0