Proc文件系统(procfs)是在系统启动时动态创建的虚拟文件系统, 并在系统关闭时解散。
它包含有关当前正在运行的进程的有用信息, 被视为内核的控制和信息中心。
proc文件系统还提供内核空间和用户空间之间的通信介质。
下面是我PC上/ proc的快照。
ls -l /proc
total 0
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1
dr-xr-xr-x 9 root root 0 Mar 31 21:34 10
dr-xr-xr-x 9 avahi avahi 0 Mar 31 21:34 1034
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1036
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1039
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1041
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1043
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1044
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1048
dr-xr-xr-x 9 root root 0 Mar 31 21:34 105
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1078
dr-xr-xr-x 9 root root 0 Mar 31 21:34 11
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1121
dr-xr-xr-x 9 lp lp 0 Mar 31 21:34 1146
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1149
dr-xr-xr-x 9 mysql mysql 0 Mar 31 21:34 1169
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1180
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1181
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1182
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1183
dr-xr-xr-x 9 postgres postgres 0 Mar 31 21:34 1184
dr-xr-xr-x 9 root root 0 Mar 31 21:34 1186
dr-xr-xr-x 9 root root 0 Mar 31 21:34 12
...
如果列出目录, 则会发现对于进程的每个PID, 都有专用的目录。
你只能使用在终端上检查目录
ls -l /proc | grep '^d'
现在, 我们检查分配的PID的特定过程, 你可以从ps命令
ps -aux
输出如下:
ps -aux命令输出
现在使用PID = 7494检查突出显示的进程, 你可以检查/ proc文件系统中是否有该进程的条目。
ls -ltr /proc/7494
输出如下:
total 0
-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:14 oom_score_adj
dr-xr-xr-x 13 mandeep mandeep 0 Apr 1 01:14 task
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:16 status
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:16 stat
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:16 cmdline
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 wchan
-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:17 uid_map
-rw-rw-rw- 1 mandeep mandeep 0 Apr 1 01:17 timerslack_ns
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 timers
-r-------- 1 mandeep mandeep 0 Apr 1 01:17 syscall
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 statm
-r-------- 1 mandeep mandeep 0 Apr 1 01:17 stack
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 smaps
-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:17 setgroups
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 sessionid
-r--r--r-- 1 mandeep mandeep 0 Apr 1 01:17 schedstat
-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:17 sched
lrwxrwxrwx 1 mandeep mandeep 0 Apr 1 01:17 root -> /proc/2341/fdinfo
-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:17 projid_map
-r-------- 1 mandeep mandeep 0 Apr 1 01:17 personality
...
在linux中, / proc在名为/ proc / PID的目录中包含每个正在运行的进程(包括内核进程)的目录, 这些目录存在:
目录 | 描述 |
---|---|
/ proc / PID / cmdline | 命令行参数。 |
/ proc / PID / cpu | 执行它的当前和最后一个cpu。 |
/ proc / PID / cwd | 链接到当前工作目录。 |
/ proc / PID /环境 | 环境变量的值。 |
/ proc / PID / exe | 链接到此过程的可执行文件。 |
/ proc / PID / fd | 目录, 其中包含所有文件描述符。 |
/ proc / PID /地图 | 内存映射到可执行文件和库文件。 |
/ proc / PID / mem | 此过程保留的内存。 |
/ proc / PID / root | 链接到此过程的根目录。 |
/ proc / PID / stat | 流程状态。 |
/ proc / PID / statm | 进程内存状态信息。 |
/ proc / PID /状态 | 易于阅读的过程状态。 |
/ proc文件系统中的其他一些文件是:
文件 | 描述 |
---|---|
/ proc /加密 | 可用密码模块列表 |
/ proc / diskstats | 每个逻辑磁盘设备的信息(包括设备号) |
/ proc /文件系统 | 列出时内核支持的文件系统列表 |
/ proc / kmsg | 保留内核输出的消息 |
/ proc / meminfo | 内核如何管理其内存的摘要。 |
/ proc / scsi | 有关通过SCSI或RAID控制器连接的任何设备的信息 |
/ proc / tty | 有关当前端子的信息 |
/ proc /版本 | 包含Linux内核版本, 发行版本号, gcc版本号(用于构建内核)以及与当前正在运行的内核版本有关的任何其他相关信息 |
例如, / proc / crypto的内容是
less /proc/crypto
name : ccm(aes)
driver : ccm_base(ctr(aes-aesni), cbcmac(aes-aesni))
module : ccm
priority : 300
refcnt : 2
selftest : passed
internal : no
type : aead
async : no
blocksize : 1
ivsize : 16
maxauthsize : 16
geniv :
name : ctr(aes)
driver : ctr(aes-aesni)
module : kernel
priority : 300
refcnt : 3
selftest : passed
internal : no
type : blkcipher
blocksize : 1
min keysize : 16
max keysize : 32
ivsize : 16
geniv : chainiv
...
参考文献:
1)
/ wiki / Procfs
2)
/ proc