718 字
4 分钟
Linux /proc 结构
/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/