/proc文件浅析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33894122/article/details/84945456

前言

/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目录下的文件

猜你喜欢

转载自blog.csdn.net/qq_33894122/article/details/84945456