概述
Linux 系统上的 /proc 目录是一种文件系统,即 proc 文件系统(procfs),它以文件系统的方式为用户提供访问系统内核数据的操作接口。proc 文件系统是一种内核和内核模块用来向进程(process)发送信息的机制,因此被称为 proc。
与其它常见的文件系统不同的是,proc 是一种伪文件系统(也即虚拟文件系统),它只存在于内存当中,因此它会在系统启动时创建并挂载到 /proc 目录,在系统关闭时卸载并释放。
下面是某设备上 /proc 的挂载信息。
$ mount | grep procproc on /proc type proc (rw,relatime)
Proc 文件系统存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看系统和进程的信息,或者改变内核的运行状态,因此可以把它视为 Linux 内核开放给用户的控制和信息中心。实际上,proc 文件系统是内核空间和用户空间之间的一种通信媒介。
/proc 目录
进程目录
在 Linux 系统中,每一个运行的进程在 /proc 下都有一个以该进程 PID 命名的专属目录,包括内核进程。
$ ls -l /proc/ | headtotal 0dr-xr-xr-x 9 root root 0 6月 1 08:48 1dr-xr-xr-x 9 root root 0 6月 3 13:52 10dr-xr-xr-x 9 www-data www-data 0 6月 3 13:52 1000dr-xr-xr-x 9 www-data www-data 0 6月 3 13:52 1001dr-xr-xr-x 9 rudy rudy 0 6月 3 13:52 100743dr-xr-xr-x 9 root root 0 6月 3 13:52 101dr-xr-xr-x 9 rudy rudy 0 6月 3 13:52 101638dr-xr-xr-x 9 rudy rudy 0 6月 3 13:52 101640dr-xr-xr-x 9 rudy rudy 0 6月 3 13:52 101641
进程目录是读取进程信息的接口,其中包含许多文件和子目录。
total 0-rw-r--r-- 1 mandeep mandeep 0 Apr 1 01:14 oom_score_adjdr-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 schedlrwxrwxrwx 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...
下表是 /proc/
| 目录 | 描述 |
|---|---|
| /proc/PID/cmdline | 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息。 |
| /proc/PID/cwd | 指向当前进程运行目录的一个符号链接。 |
| /proc/PID/environ | 进程环境变量列表。 |
| /proc/PID/exe | 指向启动当前进程的可执行文件(完整路径)的符号链接,可以通过它来启动当前进程的一个拷贝。 |
| /proc/PID/fd | 包含进程相关的所有的文件描述符。 |
| /proc/PID/maps | 与进程(可执行文件和库)相关的内存映射信息。 |
| /proc/PID/mem | 指代进程持有的内存,不可读。 |
| /proc/PID/root | 链接到进程的根目录。 |
| /proc/PID/stat | 进程状态信息。 |
| /proc/PID/statm | 进程使用的内存状态信息。 |
| /proc/PID/status | 进程状态信息,比 stat/statm 更具可读性。 |
| /proc/self | 链接到当前正在执行的进程。 |
除了通过 /proc/
子文件
除了获取进程信息,我们通常还会用 /proc 来追踪进程的状态、内核的状态、内存信息、CPU 使用率、系统启动时间(可以使用系统正常运行时间)等相应的信息。
/proc 目录中的文件及其说明如下:
子目录
/proc 目录中的子目录及其说明如下:
| 子目录 | 描述 |
|---|---|
| /proc/acpi | 高级配置和电源接口。如果内核在引导系统时检测到 ACPI BIOS,将会自动激活 ACPI。 |
| /proc/asound | ALSA 声卡设备信息。 |
| /proc/bus | 系统总线(Bus)信息,例如 /proc/bus/input/、/proc/bus/pci 等。 |
| /proc/device-tree | 设备树信息。 |
| /proc/driver | 驱动信息。 |
| /proc/dynamic_debug | 控制动态打印调试。 |
| /proc/fs | 文件系统信息。 |
| /proc/irq | 中断请求设备信息。 |
| /proc/net | 网卡设备信息。例如 /proc/net/dev 显示网络适配器及统计信息。 |
| /proc/pressure | 系统资源的压力信息,包括 cpu、io 和 memory。 |
| /proc/scsi | scsi 设备信息(通过 SCSI 或 RAID 控制器连接的所有设备)。 |
| /proc/sys | 包括所有的内核参数信息,与 sysctl -a 相似 |
| /proc/sysvipc | 系统 ipc 信息,包括 msg、sem 和 shm。 |
| /proc/tty | tty 设备信息。 |
参考 Proc文件系统-https://getiot.tech/linux/linux-proc-filesystem.html
