/proc 文件系统
100%

进程 · 第 10 课

/proc 文件系统

了解 Linux 如何通过虚拟 `/proc` 文件系统公开实时的进程和内核信息。

Linux 通常把 procfs 挂载到 /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 上的 pstopfree 等工具会从 procfs 和其他内核接口获取大量数据,然后添加标签、执行计算并格式化结果。在日常工作中,如果这些工具已经提供所需字段,应优先使用它们。只有研究过接口文档后,才应为获取特定细节或编写脚本而直接读取 /proc

直接读取程序必须正确解析格式、容忍进程消失、保护敏感输出,并避免假定一次读取就是系统的原子快照。

为什么 /proc/PID 可能会在两次检查命令之间消失?

课程已完成

你已完成 /proc 文件系统

现在,你可以把 procfs 作为一个实时且受访问控制的内核接口使用。

  • /proc 下的数字目录与可见 PID 对应起来。

  • 读取选定的每进程文件时,应考虑竞态与信息敏感性。

  • 区分进程目录和系统级接口。

  • 在可靠的日常检查中,优先使用有文档说明的工具和格式。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 进程