Proc是一个虚拟文件系统,在Linux系统中它被挂载于/proc目录之上。 Proc有多个功能,包括用户可以通过它访问内核信息或用于排错,也可以以文本流的形式来访问进程信息。很多 Linux 命令 ( 比如 ps 、 toPpstree 等 ) 都需要使用这个文件系统的信息。linux提供了一种通过 /proc 文件系统在运行时访问内核内部数据结构、改变内核设置的机制和接口。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间,其为基于随机访问存储器 (RAM) 的文件系统,类似系统还有tmpfs,swapfs等。/proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制。
一 系统/内核信息
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。/proc下的每个文件都绑到一个内核函数上, 当文件被读的时候即时产生文件内容。下面是一些重要的文件:
名称 说明
apm 高级电源管理信息
cmdline系统启动时输入的内核命令行参数
cpuinfo CPU 的信息 (型号, 家族, 缓存大小等)
devices主设备号及设备组的列表,当前加载的各种设备(块设备/字符设备)
dma 使用的DMA通道
filesystems当前内核支持的文件系统,当没有给 mount(1) 指明哪个文件系统的时候, mount(1) 就依靠该文件遍历不同的文件系统
interrupts 中断的使用及触发次数,调试中断时很有用
ioports I/O当前在用的已注册 I/O 端口范围
kcore该伪文件以 core 文件格式给出了系统的物理内存映象,可以用 GDB 查探当前内核的任意数据结构。该文件的总长度是物理内存 (RAM) 的大小再加上 4KB
kmsg可以用该文件取代系统调用 syslog(2) 来记录内核日志信息,对应dmesg命令
ksyms 内核符号表,该文件保存了内核输出的符号定义, modules(X)使用该文件动态地连接和捆绑可装载的模块
loadavg 负载均衡,平均负载数给出了在过去的 1, 5, 15 分钟里在运行队列里的任务数
locks 内核锁
meminfo物理内存、交换空间等的信息,系统内存占用情况,对应df命令
misc 杂项
modules 已经加载的模块列表,对应lsmod命令
mounts已加载的文件系统的列表,对应mount命令,无参数
net/ 该子目录包括多个 ASCII 格式的网络伪文件, 描述了网络层的部分情况 tcp udp arp route snmp …
partitions 系统识别的分区表
slabinfo Slab池信息
stat 全面统计状态表,对应ps命令
swaps 对换空间的利用情况
sys/ 通过它来访问或修改内核的参数 abi crypto debug dev fs kernel net vm
version指明了当前正在运行的内核版本,对应uname –v,
uptime 系统正常运行时间,对应date命令
二 进程信息
/proc/pid/是进程目录,存放的是当前运行进程的信息。
下面是 /proc/pid 目录下的一些重要文件 :
auxv 二进制文件。auxv_t结构数组,包含进程执行时传递给动态链接器的初始值。
cmdline 包含了用于开始进程的命令 ;
cwd 包含了当前进程工作目录的一个链接 ;
environ 包含了可用进程环境变量的列表 ;
exe 包含了正在进程中运行的程序链接;
fd/ 这个目录包含了进程打开的每一个文件的链接;
mem 包含了进程在内存中的内容;
maps该文件包含当前的映象内存区及他们的访问许可,从左到右是:和这个映射有关的地址空间,和这个映射有关的权限,距离文件开始(即这个映射开始的地方)的偏移量,这个映射文件所在的设备,文件的inode号,最后是文件名本身。
mounts 文件内容是当前进程加载的文件系统。
root 链接此进程的root目录
smaps 是比maps更详细的内存映象信息。该文件中的所有值都是从系统启动开始累计到当前时刻,
stat 包含了进程的状态信息;
statm 包含了进程的内存使用信息。各字段含义:
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 0
status 进程当前状态,State,PID,UID,PPID等信息。这些信息可通过ps或top看到。
task 该目录列出了进程中所有线程(包括主线程)。每个线程目录下也有自己的fd等目录和文件。