Linux proc17 Mar 2025 | 6 分钟阅读 在类Unix操作系统中,proc 是一个独特的文件系统,它以分层的文件结构展示了关于进程和其他系统的信息。 与直接访问内核内存或传统的跟踪机制或直接访问相比,它提供了一种更标准化、更便捷的机制来动态访问内核中持有的进程数据。 它通常在启动时映射到挂载点 /proc。proc 文件系统作为内核中的一个接口数据结构实现。它可以用于获取系统信息以及在运行时更改一些内核参数。 各种类Unix操作系统都支持proc文件系统,例如 Plan 9 来自 Bell Labs,IBM AIX,QNX,Linux,BSD,Tru64 Unix,IRIX, 和 Solaris。OpenBSD 在2015年5月发布的5.7版本中取消了对它的支持。 Linux内核开发了它以用于非进程相关的数据。 proc文件系统提供了用户空间和内核空间之间的通信方式。例如, GNU版本的进程报告工具ps就利用proc文件系统获取数据,而无需使用专门的系统调用。 proc文件系统的历史![]() UNIX 第8版Tom J. Killian 实现了 proc UNIX 第8版 (V8) 版本。1984年6月,他在 USENIX 上发表了一篇题为 "Processes as Files" 的论文。proc文件系统的设计重点是取代用于进程跟踪的系统调用 ptrace。 SVR4Ron Gomes 和 Roger Faulker 将 V8 /proc版本 移植到了 SVR4,并于1991年1月在 USENIX 上发表了一篇题为 "The Process File System and Process Model In Unix System V" 的论文。这种proc文件系统支持ps的创建,但文件只能与 ioctl()、read() 和 write() 等函数一起使用。 在1995年至1996年间,Roger Faulker 为Solaris的2.6版本建立了 procfs-2 接口,提供了一个组织良好的 /proc 文件系统,并包含许多子目录。 4.4BSD4.4BSD通过Plan 9复制了其 /proc 实现。逐步地,截至2011年2月,procfs在 FreeBSD 中逐渐被淘汰。它在2015年5月发布的 OpenBSD 5.7版本中被删除,因为它“一直存在许多竞争条件,现在已不再使用”。 Plan 9Plan 9 实现了一个进程文件系统。然而,它比V8走得更远。V8的进程文件系统为每个进程执行一个文件。这个版本将 /proc 文件作为原始文件系统的一部分,并创建了一个隔离文件的层次结构来提供这些功能。 Linux1992年,Linux在 v0.97.3 中首次添加了 /proc,并于1992年12月在 v0.98.6 中开始将其开发用于非进程相关的数据。 截至2020年,Linux的实现包含一个目录,用于所有正在运行的进程,包括内核进程,这些进程位于 /proc/PID 目录中,其中PID是进程的编号。 所有目录都包含有关单个进程的详细信息。其中一些目录解释如下:
/proc 中非进程相关的系统信息此外,/proc 文件还包含有关系统的非进程相关信息。然而,在内核的2.6版本中,许多信息已迁移到独立的sysfs伪文件系统,挂载在/sys下。 /proc/apm 或 /proc/acpi 目录依赖于电源管理模式,它依赖于sysfs,并包含有关电源管理状态的许多信息位。
此目录包含 “bogomips” 值,该值常被误解为 CPU 速度测量,如基准测试。然而,它对最终用户来说并没有衡量任何有意义的值。它是一个内核计时器校准的副作用,并且高度依赖于具有相同时钟速度的 CPU 类型,因此会产生变化的值。 CPU 封装CPU 封装表示一个物理 CPU,它可能拥有多个核心(四核表示四个,双核表示两个,单核表示一个)。它允许区分双核和超线程,即每个 CPU 封装的超线程可以通过 CPU 或同线程数来衡量,如果任何 CPU 封装的这两个值相等,则不支持超线程。 例如, 一个带有 cpu cores=2 和 siblings=2 的 CPU 封装是一个双核 CPU,但不支持超线程。
Solaris在 Solaris 中,/proc 文件从一开始就存在。Solaris 的 2.6 版本由 Roger Faulker 于1996年发布了 /proc2。 专有开发各种项目和公司为他们的系统向 /proc 文件系统添加了许多额外功能。例如, 文件 /proc/lcd 可能包含前面板 LCD 屏幕的内容。此文件中提到的文本将显示在屏幕上。 下一个主题Linux 任务管理器 |
我们请求您订阅我们的新闻通讯以获取最新更新。