Linux 通常把 procfs 挂载到 /proc。这个虚拟文件系统以文件和目录的形式呈现由内核生成的接口;其中的内容并不是存储在磁盘上的普通持久文件。它既公开进程状态,也公开部分系统级内核信息。
进程 · 第 10 课
/proc 文件系统
了解 Linux 如何通过虚拟 `/proc` 文件系统公开实时的进程和内核信息。
查找进程目录
可以用以下命令查看挂载信息和顶层条目:
$ findmnt /proc
$ ls /proc
数字目录名对应调用者所在 PID 命名空间中可见的进程 ID。例如,在 PID 12345 存在的那个时刻,/proc/12345 代表该进程。/proc/self 是一个符号链接,会解析为执行观察的进程自身目录;/proc/thread-self 则标识当前线程。
可见性和访问权限取决于凭据、命名空间、安全策略以及 hidepid 等 procfs 挂载选项。进程可能在列出目录之后、打开其中某个文件之前退出,因此目录消失是检查工具必须妥善处理的正常竞态。
数字目录 /proc/12345 通常表示什么?
读取进程信息
权限允许时,可以检查进程的状态文件:
$ less /proc/12345/status
其中包含进程名称、状态、各种 ID、凭据、内存计数器、权能和信号掩码等字段。其他常用条目包括:
/proc/12345/cmdline:以空字符分隔的命令行参数/proc/12345/environ:受访问控制且可能包含敏感信息的环境变量条目/proc/12345/fd/:表示已打开文件描述符的符号链接/proc/12345/maps:当前内存映射/proc/12345/cwd:指向当前工作目录的符号链接
应把这些内容视为不断变化的观察结果。字段可能随内核版本而异,进程也可能在读取多个文件期间改变状态,而且某些计数器还存在名称本身没有体现的细节。
哪个路径包含 PID 12345 易于阅读的字段式摘要?
读取系统级接口
并非 /proc 中的所有条目都属于某个进程。例如:
/proc/cpuinfo:内核报告的 CPU 信息/proc/meminfo:系统内存计数器/proc/mounts:当前进程所看到的挂载信息/proc/loadavg:平均负载和可运行任务信息/proc/sys/:运行时内核参数
某些文件是可写的配置接口,尤其是 /proc/sys 下的文件。不要仅仅因为它们看起来像普通文件就向其中写入内容。进行已获授权的系统变更前,应先了解参数含义、作用范围、持久化机制和回滚方法。
哪个条目提供系统级内存计数器,而不是单个进程的状态?
通过工具使用 `/proc`
Linux 上的 ps、top 和 free 等工具会从 procfs 和其他内核接口获取大量数据,然后添加标签、执行计算并格式化结果。在日常工作中,如果这些工具已经提供所需字段,应优先使用它们。只有研究过接口文档后,才应为获取特定细节或编写脚本而直接读取 /proc。
直接读取程序必须正确解析格式、容忍进程消失、保护敏感输出,并避免假定一次读取就是系统的原子快照。
为什么 /proc/PID 可能会在两次检查命令之间消失?
课程已完成
你已完成 /proc 文件系统
现在,你可以把 procfs 作为一个实时且受访问控制的内核接口使用。
将
/proc下的数字目录与可见 PID 对应起来。读取选定的每进程文件时,应考虑竞态与信息敏感性。
区分进程目录和系统级接口。
在可靠的日常检查中,优先使用有文档说明的工具和格式。