<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Procfs</id>
	<title>Procfs - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Procfs"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Procfs&amp;action=history"/>
	<updated>2026-07-08T02:40:16Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Procfs&amp;diff=458630&amp;oldid=prev</id>
		<title>imported&gt;Ohtashinichiro：​/* 参考 */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Procfs&amp;diff=458630&amp;oldid=prev"/>
		<updated>2023-12-19T09:24:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;参考&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
{{lowercase|title=procfs}}&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
在许多类 [[Unix]] 计算机系统中， &amp;#039;&amp;#039;&amp;#039;procfs&amp;#039;&amp;#039;&amp;#039; 是 [[进程]] [[文件系统]] (file system) 的缩写，包含一个伪文件系统（启动时动态生成的文件系统），用于通过[[内核]]访问进程信息。这个文件系统通常被挂载到 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; [[目录 (文件系统)|目录]]。由于 &amp;lt;tt&amp;gt;/proc&amp;lt;/tt&amp;gt; 不是一个真正的文件系统，它也就不占用存储空间，只是占用有限的内存。&lt;br /&gt;
&lt;br /&gt;
以下操作系统支持 procfs :&lt;br /&gt;
&lt;br /&gt;
* [[Solaris]]&lt;br /&gt;
* [[Berkeley Software Distribution|BSD]]&lt;br /&gt;
* [[Linux]]（将此概念扩展到了非进程相关数据）&lt;br /&gt;
* [[IBM AIX]] （其实现基于Linux以提高兼容性）&lt;br /&gt;
* [[QNX]]&lt;br /&gt;
* [[貝爾實驗室九號計畫]]（此概念之源头）&lt;br /&gt;
&lt;br /&gt;
== 历史 ==&lt;br /&gt;
=== UNIX 8 ===&lt;br /&gt;
&lt;br /&gt;
[[Tom J. Killian]] 实现了 [[Research Unix|UNIX 8]] 版本的 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt;：他1984年6月向 [[USENIX]] 提交了一份题为 &amp;quot;Processes as Files&amp;quot; 的论文。procfs 的设计目标是用来替代进行进程跟踪的 &amp;#039;&amp;#039;[[ptrace]]&amp;#039;&amp;#039; 系统调用。 详细文档请参考当时的 proc(4) 用户手册&amp;lt;ref&amp;gt;{{Cite web |url=http://man.cat-v.org/unix_8th/4/proc |title=proc(4) manual page |access-date=2011-01-05 |archive-date=2012-02-19 |archive-url=https://web.archive.org/web/20120219053905/http://man.cat-v.org/unix_8th/4/proc |dead-url=yes }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== SVR4 ===&lt;br /&gt;
[[Roger Faulkner]] 和 [[Ron Gomes]] 将 Unix 8 的 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 移植到了 [[UNIX_System_V#SVR4|SVR4]]，并在1991年1月的 [[USENIX]] 上发表了一篇题为 &amp;quot;The Process File System and Process Model in UNIX System V&amp;quot; 的论文。 此类 procfs 在功能上已经足够实现 &amp;lt;code&amp;gt;[[ps (Unix)|ps]]&amp;lt;/code&amp;gt; 命令了， 但是其中的文件只能通过 &amp;lt;code&amp;gt;read()&amp;lt;/code&amp;gt;、 &amp;lt;code&amp;gt;write()&amp;lt;/code&amp;gt; 和 &amp;lt;code&amp;gt;[[ioctl]]()&amp;lt;/code&amp;gt; 系统调用来访问。从1995到1996年， Roger Faulkner 又为 Solaris 2.6 编写了 procfs-2 接口， 提供了一个结构化的， 基于子目录的 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 文件系统。&lt;br /&gt;
&lt;br /&gt;
=== Plan 9 ===&lt;br /&gt;
[[貝爾實驗室九號計畫|Plan 9]] 实现了一个进程文件系统，但比 V8 做得更多。V8 的进程文件系统中，对一个进程相关的所有函数都在一个文件进行操作。九號計畫使用单独的文件，提供这些函数，使得 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 成为文件系统真正的一部分。&lt;br /&gt;
&lt;br /&gt;
=== 4.4BSD ===&lt;br /&gt;
[[4.4BSD]] 从 Plan 9 复刻了 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 的实现。然而从2011年2月开始， [[FreeBSD]] 逐步淘汰了 procfs &amp;lt;ref&amp;gt;{{Cite web |url=http://www.freebsd.org/doc/zh_CN.GB2312/articles/linux-users/procfs.html |title=procfs：已是过去式但仍未被遗忘 |accessdate=2011-03-21 |archive-date=2011-04-05 |archive-url=https://web.archive.org/web/20110405215138/http://www.freebsd.org/doc/zh_CN.GB2312/articles/linux-users/procfs.html |dead-url=no }}&amp;lt;/ref&amp;gt;，转而使用[[sysctl]]接口来获取进程相关信息。默认安装的 base 系统不依赖 procfs，FreeBSD 原生 ports 也不再依赖 procfs。[[macOS]]则完全弃用了procfs，只支持sysctl接口。&amp;lt;ref&amp;gt;{{cite web |author1=Amit Singh |title=/proc on Mac OS X |url=http://osxbook.com/book/bonus/ancient/procfs/ |website=Mac OS X Internals: The Book |access-date=2021-07-10 |archive-url=https://web.archive.org/web/20120504052329/http://osxbook.com/book/bonus/ancient/procfs/ |archive-date=2012-05-04 |date=2003 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
为了提供对Linux用户空间程序的二进制兼容性，FreeBSD内核也提供类似于 Linux /proc/ 的&amp;#039;&amp;#039;&amp;#039;linprocfs&amp;#039;&amp;#039;&amp;#039;。&amp;lt;ref&amp;gt;{{cite web |title=linprocfs(5) |url=https://www.freebsd.org/cgi/man.cgi?query=linprocfs&amp;amp;apropos=0&amp;amp;sektion=5&amp;amp;manpath=FreeBSD+13.0-RELEASE&amp;amp;arch=default&amp;amp;format=html |website=FreeBSD Manual Pages |publisher=The FreeBSD Project |accessdate=2021-06-12 |language=en |date=2019-11-13 |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612094031/https://www.freebsd.org/cgi/man.cgi?query=linprocfs&amp;amp;apropos=0&amp;amp;sektion=5&amp;amp;manpath=FreeBSD+13.0-RELEASE&amp;amp;arch=default&amp;amp;format=html }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Solaris ===&lt;br /&gt;
&lt;br /&gt;
Solaris 从一开始就提供对 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 的支持。 在1996年， Solaris 2.6 引入了由 Roger Faulkner 编写的 procfs2 。&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
[[Linux]]中的 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt;实现也克隆了 [[貝爾實驗室九號計畫|九號計畫]] 中对应的部分。 &lt;br /&gt;
&lt;br /&gt;
每个正在运行的进程对应于&amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt;下的一个目录，目录名就是进程的PID，每个目录包含:&lt;br /&gt;
* {{Mono|/proc/PID/cmdline}}, 启动该进程的命令行.&lt;br /&gt;
* {{Mono|/proc/PID/cwd}}, 当前[[工作目录]]的[[符号链接]].&lt;br /&gt;
* {{Mono|/proc/PID/environ}} 影响进程的环境变量的名字和值.&lt;br /&gt;
* {{Mono|/proc/PID/exe}}, 最初的[[可执行文件]]的符号链接, 如果它还存在的话。 &lt;br /&gt;
* {{Mono|/proc/PID/fd}}, 一个目录，包含每个打开的[[文件描述符]]的符号链接.&lt;br /&gt;
* {{Mono|/proc/PID/fdinfo}}, 一个目录，包含每个打开的[[文件描述符]]的位置和标记&lt;br /&gt;
* {{Mono|/proc/PID/maps}}, 一个文本文件包含[[内存映射]]文件与块的信息。&lt;br /&gt;
* {{Mono|/proc/PID/mem}}, 一个二进制图像(image)表示进程的[[虚拟内存]], 只能通过{{tsl|en|ptrace}}化进程访问.&lt;br /&gt;
* {{Mono|/proc/PID/root}}, 该进程所能看到的根路径的符号链接。如果没有[[chroot|chroot监狱]]，那么进程的根路径是/.&lt;br /&gt;
* {{Mono|/proc/PID/status}}包含了进程的基本信息，包括运行状态、内存使用。 &lt;br /&gt;
* {{Mono|/proc/PID/task}}, 一个目录包含了[[硬链接]]到该进程启动的任何任务 &lt;br /&gt;
&lt;br /&gt;
(用户可以获得[[进程ID|PID]]使用工具如[[pgrep]], [[pidof]]或[[ps (Unix)|ps]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -l /proc/$(pgrep -n python)/fd        # List all file descriptors of the most recently started `python&amp;#039; process&lt;br /&gt;
samtala 0&lt;br /&gt;
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -&amp;gt; /dev/pts/3&lt;br /&gt;
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -&amp;gt; /dev/pts/3&lt;br /&gt;
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -&amp;gt; /dev/pts/3&lt;br /&gt;
$ readlink /proc/$(pgrep -n python)/exe    # List executable used to launch the most recently started `python&amp;#039; process  &lt;br /&gt;
/usr/bin/python3.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[[Linux kernel|Linux]] 2.6把 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 下大量的非進程相關的系统信息移動到一個专门的偽文件系統，稱為 [[sysfs]]（該文件系統是掛載到 &amp;lt;code&amp;gt;/sys&amp;lt;/code&amp;gt; 上面）:&lt;br /&gt;
&lt;br /&gt;
* 电源管理系统（如果有的话）对应的目录{{Mono|/proc/acpi}}或{{Mono|/proc/apm}} &lt;br /&gt;
* {{Mono|/proc/buddyinfo}}, 信息关于{{tsl|en|Buddy memory allocation|伙伴内存分配器}}用于处理内存碎片。&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 |url=http://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-proc-buddyinfo.html&lt;br /&gt;
 |title=3.2.2. /proc/buddyinfo&lt;br /&gt;
 |work=centos.org&lt;br /&gt;
 |access-date=2016-10-02&lt;br /&gt;
 |archive-url=https://web.archive.org/web/20130902032109/http://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-proc-buddyinfo.html&lt;br /&gt;
 |archive-date=2013-09-02&lt;br /&gt;
 |dead-url=yes&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* {{Mono|/proc/bus}}, 包含对应于计算机上各种总线的目录, 如input/[[PCI]]/[[USB]]. 在/sys/bus下包含更丰富的信息。&lt;br /&gt;
* {{Mono|/proc/fb}}, 可利用的帧缓冲的列表&lt;br /&gt;
* {{Mono|/proc/cmdline}}, 传递给内核的启动选项。&lt;br /&gt;
* {{Mono|/proc/cpuinfo}}, 包含[[CPU]]信息, 诸如厂商（vendor），型号 (family, model，model names), 速度, 缓存大小, 逻辑核数 , 物理核数, [[CPU flags]]，以及[[BogoMips]].对于多核CPU，/proc/cpuinfo的逻辑核数&amp;quot;siblings&amp;quot;与物理核数&amp;quot;cpu cores&amp;quot;分别表示:&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 |last=Baron&lt;br /&gt;
 |first=Jason&lt;br /&gt;
 |title=HT vs. dual-core&lt;br /&gt;
 |url=http://www.redhat.com/archives/nahant-list/2006-January/msg00176.html&lt;br /&gt;
 |accessdate=2016-10-02&lt;br /&gt;
 |archive-date=2016-05-13&lt;br /&gt;
 |archive-url=https://web.archive.org/web/20160513191756/http://www.redhat.com/archives/nahant-list/2006-January/msg00176.html&lt;br /&gt;
 |dead-url=no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;siblings&amp;quot; = (HT per CPU package) * (# of cores per CPU package)&lt;br /&gt;
&amp;quot;cpu cores&amp;quot; = (# of cores per CPU package)&amp;lt;/pre&amp;gt;&lt;br /&gt;
CPU package是指单独封装的一颗CPU。这可以区分[[超线程]]与双核，例如每颗CPU超线程数量为&amp;#039;&amp;#039;siblings / CPU cores&amp;#039;&amp;#039;. 如果二者的值相等，则CPU不支持超线程.&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 |title=Understanding Linux /proc/cpuinfo&lt;br /&gt;
 |url=http://www.richweb.com/cpu_info&lt;br /&gt;
 |archiveurl=https://web.archive.org/web/20120403230159/http://www.richweb.com/cpu_info&lt;br /&gt;
 |accessdate=2015-04-21&lt;br /&gt;
 |archivedate=2012-04-03&lt;br /&gt;
 |website=richweb.com&lt;br /&gt;
 |dead-url=yes&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;   &lt;br /&gt;
* {{Mono|/proc/crypto}}, 可利用的加密模块列表&lt;br /&gt;
* {{Mono|/proc/devices}},  字符设备与块设备列表，按照设备ID排序，但给出了{{Mono|/dev}}名字的主要部分&lt;br /&gt;
* {{Mono|/proc/diskstats}}, 给出了每一块逻辑磁盘设备的一些信息 &lt;br /&gt;
* {{Mono|/proc/filesystems}}, 当前时刻内核支持的文件系统的列表 &lt;br /&gt;
* {{Mono|/proc/interrupts}}, {{Mono|/proc/iomem}}, {{Mono|/proc/ioports}}, {{Mono|/proc/irq}}, 设备的一些与中断、内存访问有关的信息&lt;br /&gt;
* {{Mono|/proc/kmsg}}, 用于跟踪读取内核消息 &amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 | url = https://books.google.com/books?id=wLJWBQAAQBAJ&lt;br /&gt;
 | title = Linux Filesystem Hierarchy&lt;br /&gt;
 | last1 = Nguyen&lt;br /&gt;
 | first1 = Binh&lt;br /&gt;
 | author-link1 = &lt;br /&gt;
 | author-link2 = &lt;br /&gt;
 | date = 2004-07-30&lt;br /&gt;
 | publisher = Binh Nguyen&lt;br /&gt;
 | page = 63&lt;br /&gt;
 | access-date = 2016-07-18&lt;br /&gt;
 | quote = /proc/kmsg[:] Messages output by the kernel. These are also routed to syslog.&lt;br /&gt;
 | archive-date = 2016-12-14&lt;br /&gt;
 | archive-url = https://web.archive.org/web/20161214124342/https://books.google.com/books?id=wLJWBQAAQBAJ&lt;br /&gt;
 | dead-url = no&lt;br /&gt;
 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* {{Mono|/proc/meminfo}}, 包含内核管理内存的一些汇总信息 &lt;br /&gt;
* {{Mono|/proc/modules}}, 是{{Mono|/proc}}最重要的文件之一, 包含了当前载入的内核模块列表&lt;br /&gt;
* {{Mono|/proc/mounts}}, 包含了当前安装设备及安装点的符号链接&lt;br /&gt;
* {{Mono|/proc/net/}}, 一个目录包含了当前网络栈的信息，特别是{{Mono|/proc/net/nf_conntrack}}列出了存在的网络连接(对跟踪路由特别有用，因为[[iptables]]转发被用于重定向网络连接)&lt;br /&gt;
* {{Mono|/proc/partitions}}, 一个设备号、尺寸与{{Mono|/dev}}名的列表，内核用于辨别已存在的[[硬盘分区]]&lt;br /&gt;
* {{Mono|/proc/scsi}}, 给出任何通过[[SCSI]]或[[RAID]]控制器挂接的设备的信息&lt;br /&gt;
* {{Mono|/proc/self}} (即{{Mono|/proc/PID/}}其中[[进程ID]]是当前进程的) 为当前进程的符号链接 &lt;br /&gt;
* {{Mono|/proc/slabinfo}}, Linux内核频繁使用的对象的统计信息 &lt;br /&gt;
* {{Mono|/proc/swaps}}, 活动交换分区的信息，如尺寸、优先级等。 &lt;br /&gt;
* {{Mono|/proc/sys}}，动态可配置的内核选项. 其下的目录对应与内核区域，包含了可读与可写的虚拟文件（virtual file）. &lt;br /&gt;
* {{Mono|/proc/sysvipc}}, 包括共享内存与[[进程间通信]] (IPC)信息&lt;br /&gt;
* {{Mono|/proc/tty}}, 包含当前终端信息; {{Mono|/proc/tty/driver}}是可利用的[[终端|tty]]类型列表，其中的每一个是该类型的可用设备列表。&lt;br /&gt;
* {{Mono|/proc/uptime}}, 内核启动后经过的秒数与idle模式的秒数 &lt;br /&gt;
* {{Mono|/proc/version}}, 包含Linux内核版本，发布号（distribution number）, 编译内核的[[gcc]]版本，其他相关的版本 &lt;br /&gt;
* 其他文件依赖于不同的硬件，模块配置与内核改变 &lt;br /&gt;
&lt;br /&gt;
Linux下使用 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 的基本工具是 [[procps]] (&amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; processes) 中的程序，這個程序只對 procfs 具有意義。procfs 對部分功能從[[核心態]]移到[[用戶態]]的過程中產生重大的意義。像是 GNU 版本的 ps 只需在[[用戶態]]底下運作透過 procfs 取得資料便可以完成所有的工作。&lt;br /&gt;
&lt;br /&gt;
相关命令：&lt;br /&gt;
*sysctl &lt;br /&gt;
*lsdev 收集相关设备的DMA, IRQ, I/O端口信息并汇总显示&lt;br /&gt;
*procinfo&lt;br /&gt;
&lt;br /&gt;
=== Cygwin ===&lt;br /&gt;
Cygwin实现的 &amp;lt;code&amp;gt;/proc&amp;lt;/code&amp;gt; 与Linux基本一致。&lt;br /&gt;
&lt;br /&gt;
=== Cobalt ===&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://osxbook.com/book/bonus/chapter11/procfs/ A MacFUSE-Based Process File System for Mac OS X]{{Wayback|url=http://osxbook.com/book/bonus/chapter11/procfs/ |date=20081002065916 }}&lt;br /&gt;
* [http://www.ibm.com/developerworks/library/l-proc.html Access the Linux kernel using the Procfs]{{Wayback|url=http://www.ibm.com/developerworks/library/l-proc.html |date=20080602171649 }} An IBM developerWorks article by M. Tim Jones&lt;br /&gt;
* [http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html Linux-Filesystem-Hierarchy]{{Wayback|url=http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html |date=20080915163240 }} Linux Documentation Project&lt;br /&gt;
&lt;br /&gt;
== 参考 ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
* [http://www.redhat.com/advice/tips/meminfo.html Red Hat, Inc. &amp;#039;&amp;#039;Tips &amp;amp; Tricks Featured Article: /proc/meminfo Explained&amp;#039;&amp;#039;, March 2003.]{{Wayback|url=http://www.redhat.com/advice/tips/meminfo.html |date=20081008030727 }}&lt;br /&gt;
&lt;br /&gt;
{{Filesystem}}&lt;br /&gt;
{{Linux内核}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Unix文件系统技术]]&lt;br /&gt;
[[Category:Linux内核功能]]&lt;br /&gt;
[[Category:特殊目的文件系统]]&lt;br /&gt;
[[Category:Linux内核接口]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Ohtashinichiro</name></author>
	</entry>
</feed>