linux proc - yaokun123/php-wiki GitHub Wiki

深入理解linux系统下proc文件系统内容

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。

为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。

大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。

一、 进程目录中的常见文件介绍

/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。

[root@shuidi-shell-001:/proc]# ll /proc|head -10
总用量 0
dr-xr-xr-x  9 root          root                        0 4月   2 2022 1
dr-xr-xr-x  9 root          root                        0 8月  21 16:22 10
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10002
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10005
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10019
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10027
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10032
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10037
dr-xr-xr-x  9 root          root                        0 11月 23 10:11 10052

上面列出的是/proc目录中一些进程相关的目录,每个目录中是当程本身相关信息的文件。下面是运行的一个PID为16966的进程的相关文件,其中有些文件是每个进程都会具有的,后文会对这些常见文件做出说明。

[root@shuidi-shell-001:/proc/16966]# ll
总用量 0
dr-xr-xr-x 2 root root 0 11月 23 10:00 attr
-rw-r--r-- 1 root root 0 11月 23 10:00 autogroup
-r-------- 1 root root 0 11月 23 10:00 auxv
-r--r--r-- 1 root root 0 11月 23 09:52 cgroup
--w------- 1 root root 0 11月 23 10:00 clear_refs
-r--r--r-- 1 root root 0 11月 23 09:50 cmdline    // — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
-rw-r--r-- 1 root root 0 11月 23 09:52 comm
-rw-r--r-- 1 root root 0 11月 23 10:00 coredump_filter
-r--r--r-- 1 root root 0 11月 23 10:00 cpuset
lrwxrwxrwx 1 root root 0 11月 23 10:00 cwd -> /home/www/pypingan/es/extend    //  — 指向当前进程运行目录的一个符号链接
-r-------- 1 root root 0 11月 23 10:00 environ    // — 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
lrwxrwxrwx 1 root root 0 11月 23 09:51 exe -> /usr/bin/python2.7    // 指向启动当前进程的可执行文件的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
dr-x------ 2 root root 0 11月 23 09:50 fd    //  这是个目录,包含当前进程打开的每一个文件的文件描述符,这些文件描述符是指向实际文件的一个符号链接
dr-x------ 2 root root 0 11月 23 10:00 fdinfo
-rw-r--r-- 1 root root 0 11月 23 10:00 gid_map
-r-------- 1 root root 0 11月 23 10:00 io
-r--r--r-- 1 root root 0 11月 23 10:00 limits    // 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取
-rw-r--r-- 1 root root 0 11月 23 10:00 loginuid
dr-x------ 2 root root 0 11月 23 10:00 map_files
-r--r--r-- 1 root root 0 11月 23 10:00 maps    // 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
-rw------- 1 root root 0 11月 23 10:00 mem    // 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取
-r--r--r-- 1 root root 0 11月 23 10:00 mountinfo
-r--r--r-- 1 root root 0 11月 23 10:00 mounts
-r-------- 1 root root 0 11月 23 10:00 mountstats
dr-xr-xr-x 7 root root 0 11月 23 10:00 net
dr-x--x--x 2 root root 0 11月 23 10:00 ns
-r--r--r-- 1 root root 0 11月 23 10:00 numa_maps
-rw-r--r-- 1 root root 0 11月 23 10:00 oom_adj
-r--r--r-- 1 root root 0 11月 23 10:00 oom_score
-rw-r--r-- 1 root root 0 11月 23 10:00 oom_score_adj
-r--r--r-- 1 root root 0 11月 23 10:00 pagemap
-r-------- 1 root root 0 11月 23 10:00 patch_state
-r--r--r-- 1 root root 0 11月 23 10:00 personality
-rw-r--r-- 1 root root 0 11月 23 10:00 projid_map
lrwxrwxrwx 1 root root 0 11月 23 10:00 root -> /    // 指向当前进程运行根目录的符号链接,通常采用chroot命令使每个进程运行于独立的根目录
-rw-r--r-- 1 root root 0 11月 23 10:00 sched
-r--r--r-- 1 root root 0 11月 23 10:00 schedstat
-r--r--r-- 1 root root 0 11月 23 10:00 sessionid
-rw-r--r-- 1 root root 0 11月 23 10:00 setgroups
-r--r--r-- 1 root root 0 11月 23 10:00 smaps
-r--r--r-- 1 root root 0 11月 23 10:00 stack
-r--r--r-- 1 root root 0 11月 23 09:50 stat    // 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
-r--r--r-- 1 root root 0 11月 23 10:00 statm    // 当前进程占用内存的状态信息,通常以“页面”(page)表示
-r--r--r-- 1 root root 0 11月 23 09:50 status    // 与stat所提供信息类似,但可读性较好
-r--r--r-- 1 root root 0 11月 23 10:00 syscall
dr-xr-xr-x 3 root root 0 11月 23 10:00 task    // 目录文件,包含由当前进程所运行的每一个线程的相关信息
-r--r--r-- 1 root root 0 11月 23 10:00 timers
-rw-r--r-- 1 root root 0 11月 23 10:00 uid_map
-r--r--r-- 1 root root 0 11月 23 10:00 wchan

二、/proc目录下常见的文件介绍