Tom J. Killian 实现了 UNIX 8 版本的 /proc:他1984年6月向 USENIX 提交了一份题为 "Processes as Files" 的论文。procfs 的设计目标是用来替代进行进程跟踪的 ptrace 系统调用。 详细文档请参考当时的 proc(4) 用户手册[1]。
SVR4
Roger Faulkner 和 Ron Gomes 将 Unix 8 的 /proc 移植到了 SVR4,并在1991年1月的 USENIX 上发表了一篇题为 "The Process File System and Process Model in UNIX System V" 的论文。 此类 procfs 在功能上已经足够实现 ps 命令了, 但是其中的文件只能通过 read()、 write() 和 ioctl() 系统调用来访问。从1995到1996年, Roger Faulkner 又为 Solaris 2.6 编写了 procfs-2 接口, 提供了一个结构化的, 基于子目录的 /proc 文件系统。
Plan 9
Plan 9 实现了一个进程文件系统,但比 V8 做得更多。V8 的进程文件系统中,对一个进程相关的所有函数都在一个文件进行操作。九號計畫使用单独的文件,提供这些函数,使得 /proc 成为文件系统真正的一部分。
4.4BSD
4.4BSD 从 Plan 9 复刻了 /proc 的实现。然而从2011年2月开始, FreeBSD 逐步淘汰了 procfs [2],转而使用sysctl接口来获取进程相关信息。默认安装的 base 系统不依赖 procfs,FreeBSD 原生 ports 也不再依赖 procfs。macOS则完全弃用了procfs,只支持sysctl接口。[3]
为了提供对Linux用户空间程序的二进制兼容性,FreeBSD内核也提供类似于 Linux /proc/ 的linprocfs。[4]
Solaris
Solaris 从一开始就提供对 /proc 的支持。 在1996年, Solaris 2.6 引入了由 Roger Faulkner 编写的 procfs2 。
$ ls-l/proc/$(pgrep-npython)/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-npython)/exe# List executable used to launch the most recently started `python' process /usr/bin/python3.1
)
Linux 2.6把 /proc 下大量的非進程相關的系统信息移動到一個专门的偽文件系統,稱為 sysfs(該文件系統是掛載到 /sys 上面):
^Nguyen, Binh. Linux Filesystem Hierarchy. Binh Nguyen: 63. 2004-07-30 [2016-07-18]. (原始内容存档于2016-12-14). /proc/kmsg[:] Messages output by the kernel. These are also routed to syslog.