概述
proc - process information pseudo-filesystem(进程信息虚拟文件系统)
proc文件系统是一个用于提供内核数据结构接口的虚拟文件系统。通常其挂载于/proc目录下。一般系统会自动挂载此文件系统,当然也可以使用如下命令进行手动挂载:
mount -t proc proc /proc # 可以看到proc文件系统的类型也为proc
大部分此文件系统中的文件是只读的,不过也有一些可写文件,修改这些文件可以修改一些内核运行时变量。
从名字上看,这个文件系统一开始只是用于提供进程相关信息的,后面随着发展,也就开始用于存放其他系统相关的信息。
文件与子目录
/proc目录下的文件与子目录大致分为以下几类:
-
/proc/[pid] 子目录
这类子目录以对应进程的pid命名,其下的文件与子目录包含了对应进程的运行信息。对于使用了多线程的进程,其下一般会有一个task子目录,task子目录中以tid命名的子目录中的文件包含了各个线程的相关信息。这些子目录在使用getdents()函数遍历/proc目录时可见,同时也可以使用ls指令查看。 -
/proc/[tid] 子目录
同/proc/[pid]/task/下的各个tid命名的子目录,不过对于getdents()函数和ls指令,这些目录是不可见的。 -
/proc/self 软链接
一个神奇的链接,当进程访问此目录,则相当于访问自己pid对应的/proc/[pid]目录 -
/proc/thread-self 软链接
也是一个神奇的链接,当线程访问此目录,则相当于访问自己tid对应的/proc/self/task/[tid]目录 -
/proc/[a-z]* 其他文件与子目录
常用的文件如下:文件名 用途 cmdline 记录内核启动参数 cmdline 记录内核启动参数 cpuinfo CPU相关信息 iomem IO设备的内存使用情况 interrupts 显示被占用的中断和占用者信息 ioports IO端口使用情况 kcore 系统物理内存映像,不可读 loadavg 系统平均负载 meminfo 物理内存和swap分区使用情况 modules 加载的模块列表 mounts 已挂载文件系统的信息 partitions 系统识别的分区表 swaps 交换分区利用情况 version 内核版本信息 uptime 系统运行时间
使用方法
程序直接使用标准IO或者C库的文件读写函数访问即可获取其中信息,shell中使用cat直接打印文件内容。
一张图搞定/proc
一张图说清楚/proc目录的来龙去脉:
原始网址:SecurityZines : Understand log4j in and out in flyer