我正在开发一个需要大量系统和进程信息的应用程序,其中一些信息只能通过/proc获得,并且我有一些关于访问这些结构的一般性问题。
该应用程序将在Linux(内核> = 2.6)上运行,而不是其他任何Unix风格的操作系统。它应该可以访问/proc中的任何数据,由于规格尚不清楚,因此现在无法确定哪些数据是必要的,但整个/proc目录与该应用程序相关。
首先:是否有良好的文档涵盖了从内核版本到内核版本添加/删除的所有功能?特别感兴趣的是单个文件的格式。我能否认为这是理所当然的?它在内核版本之间是否会改变?
基于内核的解析过程不会成为问题,只是我找不到任何有关从版本到版本已更改的内容的良好文档,这可以帮助我提前捕获解析错误。
此外:是否有明确的功能列表可以通过内核选项激活/停用(除了/proc功能本身)?我正在寻找仅在设置了适当选项的情况下才存在的文件/目录列表。
作为我考虑的示例,这是一个指向proc manpage的链接(http://linux.die.net/man/5/proc),其中包括很多有用的信息,例如某些选项包括它们在最早的内核版本中可用,某些选项包括是否需要加载模块。然而,这并没有描述所有信息的输出格式,如果我想解析它(例如它在所有内核版本中是否保持一致或在某个时候发生了变化),这是我需要的。
我想知道的第二件事是,如果查询的进程在查询时死亡会发生什么。我的时间间隔是什么?例如,如果我要获取进程列表以读取所有结构,并逐个解析它们,如果我的进程x在我读取它之前死亡会发生什么?即使我检查目录是否存在,它下次应用程序调用时也可能已经消失。
最后但并非最不重要的:是否有任何主要分发版未挂载proc?
据我所了解,许多常见工具都基于/proc接口,例如lsmod
或free
,因此我猜可以几乎总是期望/proc存在。