02-proc文件系统
12.1 /proc文件系统
在较老的UNIX实现中,通常并无简单方法来获取(或修改)内核属性并回答如下问题:
- 系统中有多少进程正在运行,其属主是谁?
- 一个进程已经打开了什么文件?
- 目前锁定了什么文件,哪些进程持有这些锁?
- 系统正在使用什么套接字(socket)?
一些老版UNIX实现解决这一问题的方法是允许特权级程序深入内核内存中的数据结构。然而,这会带来各种问题。特别是,这要求对内核数据结构具有专业知识,并且这些结构可能因内核版本的演进而发生改变,故而需要加以重写。
为了提供更为简便的方法来访问内核信息,许多现代UNIX实现提供了一个/proc虚拟文件系统。该文件系统驻留于/proc目录中,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件I/O系统调用来方便地读取,有时还可以修改这些信息。之所以将/proc文件系统称为虚拟,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成。
本节展示了/proc文件系统的概况。后续各章将视各自主题来描述特定的/proc文件。虽然许多UNIX实现提供了/proc文件系统,但SUSv3并未对其进行规范,本书所述细节是Linux专有的。