proc - process information pseudo-filesystem
The proc filesystem is a pseudo-filesystem which is used as an interface to kernel data structures. It is
commonly mounted at /proc. Most of it is read-only, but some files allow kernel variables to be changed.
上面是man proc里面的说明,可以看出,proc为一个内核数据结构接口,用户空间和内核空间可以通信,与普通文件不同
的是,这些虚拟文件的内容都是动态创建的。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过 proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
* /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
* /proc/meminfo - 物理内存、交换空间等的信息
* /proc/mounts - 已加载的文件系统的列表
* /proc/devices - 可用设备的列表
* /proc/filesystems - 被支持的文件系统
* /proc/modules - 已加载的模块
* /proc/version - 内核版本
* /proc/cmdline - 系统启动时输入的内核命令行参数
在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。系统中的top、ps等命令都是通过读取proc文件中的内容,通过重新编码来显示的。
ls -2907 (2907为系统中的ftp服务进程)
dr-xr-xr-x 2 root root 0 07-14 19:44 attr
-r-------- 1 root root 0 07-14 19:44 auxv
-r--r--r-- 1 root root 0 07-14 19:44 cmdline
-r--r--r-- 1 root root 0 07-14 19:44 cpuset
lrwxrwxrwx 1 root root 0 07-14 19:44 cwd -> /
-r-------- 1 root root 0 07-14 19:44 environ
lrwxrwxrwx 1 root root 0 07-14 19:44 exe -> /usr/sbin/vsftpd
dr-x------ 2 root root 0 07-14 19:44 fd
-rw-r--r-- 1 root root 0 07-14 19:44 loginuid
-r--r--r-- 1 root root 0 07-14 19:44 maps
-rw------- 1 root root 0 07-14 19:44 mem
-r--r--r-- 1 root root 0 07-14 19:44 mounts
-r-------- 1 root root 0 07-14 19:44 mountstats
-rw-r--r-- 1 root root 0 07-14 19:44 oom_adj
-r--r--r-- 1 root root 0 07-14 19:44 oom_score
lrwxrwxrwx 1 root root 0 07-14 19:44 root -> /
-r--r--r-- 1 root root 0 07-14 19:44 schedstat
-r-------- 1 root root 0 07-14 19:44 smaps
-r--r--r-- 1 root root 0 07-14 19:44 stat
-r--r--r-- 1 root root 0 07-14 19:44 statm
-r--r--r-- 1 root root 0 07-14 19:44 status
dr-xr-xr-x 3 root root 0 07-14 19:44 task
-r--r--r-- 1 root root 0 07-14 19:44 wchan
cat cmdline
/usr/sbin/vsftpd/etc/vsftpd/vsftpd.conf
可以看出来,这个文件中的为进程启动时候的命令,用ps命令查看进程的时候cmd就是是这个文件的内容,可以看出来ps命令其实就是读取proc文件下的编号为整数(进程id)的文件夹下特定的文件并按照一定的格式重新编码然后显示的。
参考:
http://linux.chinaunix.net/techdoc/system/2008/04/27/996792.shtml
http://blog.csdn.net/zhenwenxian/article/details/6076685
http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlproc.html