前言
/proc是一种虚拟文件系统,也叫进程数据文件系统,其信息不是存储在块设备中的,只有在读取/proc目录下文件的时候才会去动态生成。
/proc文件系统可以获得很多进程信息,在调试kernel的过程中很有用。
/proc内容
/proc文件系统的容量依系统而不同(硬件配置、体系结构)。主要包含以下几大类:
- 系统进程的特征数据
- 内存管理
- 文件系统
- 设备驱动程序
- 系统总线
- 电源管理
- 终端
- 系统控制参数
从内核开发趋势上看,正在远离使用/proc文件系统的方法。
进程的数据
/proc的初衷就是来传递进程数据
aston@ubuntu:/$ ls /proc/1838/
attr cwd map_files oom_adj sessionid timers
autogroup environ maps oom_score setgroups timerslack_ns
auxv exe mem oom_score_adj smaps uid_map
cgroup fd mountinfo pagemap stack wchan
clear_refs fdinfo mounts personality stat
cmdline gid_map mountstats projid_map statm
comm io net root status
coredump_filter limits ns sched syscall
cpuset loginuid numa_maps schedstat task
这是进程pid号为1838的进程状态信息。具体信息cat
查询即可。
- environ:表示为该程序所设置的环境变量。
- maps:列出了进程所使用的库,有点长。。
- status:包含了进程状态一般信息(text格式)
- stat和statm:以一连串数字的形式提供进程内存消耗的信息
- fd:文件夹内有一连串数字文件,表示文件描述符,都是符号链接,链接到对应的文件。
- cwd:是个符号链接,对应到工作目录
- exe:是个符号链接,对应到可执行二进制文件
- root:指向当前进程根目录
一般性系统信息
/proc的子目录包含了进程的一些信息,/proc目录下包含了系统的一般信息,比如iomem、ioports提供了用来与设备通信的内存地址和端口相关信息,都是文本形式的列表。
buddyinfo和slabinfo提供了伙伴系统和slab分配器的使用情况
meminfo给出了一般性内存使用情况,分为高端、低端、空闲内存等
Vmstat给出了内存的其他信息,包含当前在内存管理的各个子系统内存页的数目。
kallsyms和kcore用于支持内核代码调试。前者kallsyms为符号表,给出了所有全局内核变量和函数的地址;kcore是一个动态内核事件,包含了运行中内核所有数据。
interrupts保存了当前操作器件引发的中断说明
网络信息
在/proc/net子目录下提供了各种网络选项数据,有下面有趣的数据项:
udp和tcp:提供了IPv4的tcp和udp的套接字统计数据。
arp:反向地址解析的ARP表
dev:保存了系统通过网络接口传输的数据量的统计数据
系统控制参数
还可以使用sysctl系统调用来动态检查、修改内核行为和系统控制参数。
比如修改/proc/sys目录下的文件