在许多类
Unix 计算机系统中, procfs 是
进程 文件系统 (file system) 的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过
内核访问进程信息。这个文件系统通常被挂载到 /proc
目录。由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
简介
在许多类
Unix计算机系统中,procfs是
进程文件系统(file system) 的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过
内核访问进程信息。这个文件系统通常被挂载到/proc
目录。由于/proc不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。
以下操作系统支持 procfs:
历史背景
UNIX 8th Edition
Tom J. Killian实现了UNIX 8th Edition版本的/proc:他1984年6月向
USENIXptrace系统调用。 详细文档请参考proc(4) manual page。
SVR4
Roger Faulkner和Ron Gomes将 V8 的/proc移植到了
SVR4,并在1991年1月的
USENIXioctl().
九号项目
九号项目实现了一个进程文件系统,但比 V8 做得更多。V8 的进程文件系统中,对一个进程相关的所有函数都在一个文件进行操作。九号项目使用单独的文件,提供这些函数,使得/proc 成为文件系统真正的一部分。
4.4BSD
4.4BSD基于九号项目 克隆得到了其/proc系统。注意,在 FreeBSD 中 procfs 已被放弃。默认安装的 base 系统不依赖 procfs,FreeBSD 原生 ports 也不再依赖 procfs。
Solaris
Solaris 2.6 的/proc(完成于 1996)也克隆了九号项目.
Linux
Linux中的/proc实现也克隆了九号项目中对应的部分。
每个正在运行的进程对应于/proc下的一个目录,目录名就是进程的PID,每个目录包含:
(用户可以获得
PID使用工具如
pgrep,
pidof或ps:
$ ls -l /proc/$(pgrep -n python)/fd # List all file descriptors of the most recently started `python' processsamtala 0lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -> /dev/pts/3lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -> /dev/pts/3lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -> /dev/pts/3$ readlink /proc/$(pgrep -n python)/exe # List executable used to launch the most recently started `python' process /usr/bin/python3.1
)
Linux2.6把/proc下大量的非进程相关的系统信息移动到一个专门的伪文件系统,称为sysfs(该文件系统是挂载到/sys上面):
CPU package是指单独封装的一颗CPU。这可以区分
超线程与双核,例如每颗
CPU超线程数量为siblings / CPU cores. 如果二者的值相等,则CPU不支持超线程.
Linux下使用/proc的基本工具是procps(/procprocesses) 中的程序,这个程序只对 procfs 具有意义。procfs 对部分功能从
核心态移到
用户态的过程中产生重大的意义。像是 GNU 版本的 ps 只需在
用户态底下运作透过 procfs 获取数据便可以完成所有的工作。
相关命令: