Linux 访问/处理

Linux 访问/处理,linux,kernel,procfs,Linux,Kernel,Procfs,我目前正在开发一个需要大量系统和流程信息的应用程序,其中一些信息只能通过/proc获得,我对访问这些结构有一些一般性问题 该应用程序将在Linux(内核>=2.6)上运行,而不是在任何其他Unix风格的操作系统上运行。它应该可以访问/proc中的任何数据,我不能说现在需要什么,因为规范还不清楚,但是整个/proc目录与应用程序相关。 首先:是否有一个很好的文档涵盖了从内核版本到内核版本添加/删除的所有特性?我特别好奇的一件事是单个文件的格式。我能认为这是理所当然的吗?它在内核版本之间会变化吗

我目前正在开发一个需要大量系统和流程信息的应用程序,其中一些信息只能通过/proc获得,我对访问这些结构有一些一般性问题

该应用程序将在Linux(内核>=2.6)上运行,而不是在任何其他Unix风格的操作系统上运行。它应该可以访问/proc中的任何数据,我不能说现在需要什么,因为规范还不清楚,但是整个/proc目录与应用程序相关。
首先:是否有一个很好的文档涵盖了从内核版本到内核版本添加/删除的所有特性?我特别好奇的一件事是单个文件的格式。我能认为这是理所当然的吗?它在内核版本之间会变化吗

基于内核连接解析过程一点也不成问题,只是我找不到任何好的文档来说明从一个版本到另一个版本的变化,这可以帮助我提前捕获解析错误


此外:是否有可由内核选项激活/停用的功能的明确列表(当然,/proc功能本身除外)?我正在寻找一个文件/目录列表,这些文件/目录只存在于内核中设置了适当选项的情况下

作为我想到的一个例子,这是一个指向proc手册页的链接(http://linux.die.net/man/5/proc)其中包含了很多有用的信息,例如,一些选项包括最早的内核版本,一些选项包括是否需要加载模块。不过,这并没有描述所有信息的输出格式,如果我想对其进行解析,这是我需要的(例如,如果它在所有内核版本中都是一致的,或者在某一点上发生了更改)


我想知道的第二件事是,如果被查询的进程在被查询时死亡,会发生什么情况。我的时间间隔是多少?例如,如果我要获取读取所有结构的进程列表,并逐个解析它们,那么如果我的进程x在我开始读取之前就死了,会发生什么?即使我检查目录是否存在,一次应用程序调用后它仍可能消失


最后但并非最不重要的一点:是否有任何主要的发行版不是挂载过程


据我所知,很多常用工具都是基于/proc接口的,比如
lsmod
free
,因此我猜想/proc几乎总是存在的。

即使没有任何保证,
/proc
接口也非常稳定(与
/sys
接口不同)。几乎所有的更改都是向后兼容的,至少在一些版本中是这样。你应该 为了安全起见,请坚持使用记录在案的接口。如果文件存在,其格式可以在以后的版本中扩展,但通常以向后兼容的方式扩展,例如向表中添加列。最有可能消失的部分是与硬件支持项(如ACPI或SCSI)有关的部分,它们正在迁移到
/sys
(两者都存在时,过渡期很长)

除硬件信息外,大多数信息与体系结构无关(例如,
/proc/cpuinfo
在不同的体系结构上有非常不同的字段)

主要文档在内核源代码中。考虑到概述和<代码> PROC.TXT 是详细的细节。内核文档通常是不完整的,所以如果您有时需要阅读源代码,请不要感到惊讶

如果内核中包含其公开数据的驱动程序,则默认情况下会激活
/proc
的大多数可选部分。异常主要与很少需要从内核外部访问的硬件特性有关;如果您需要访问这些功能,您可能已经期望需要深入挖掘。查看内核源代码中的
Kconfig
文件以了解详细信息

过程数据(或与可移动硬件相关的硬件数据或由可卸载模块提供的硬件数据)可能会消失在您的鼻子下面。
/proc
下的大多数文件都可以通过一个
read
调用和一个大小合理的缓冲区来自动读取;如果您按顺序执行多个
read
调用,那么驱动程序应该保证您获得格式良好的数据。无法保证单独文件读取之间的原子性;如果您正在读取有关某个进程的信息,则该进程随时都可能死亡,原则上,在您完成之前,该进程甚至可能被另一个具有相同PID的进程所取代


正如在
/proc
的描述中所说,“这里每个人都应该说Y”。所有桌面/服务器Linux系统和大多数嵌入式Linux系统必须具有
/proc
;很多事情都需要它,包括
ps
和其他流程管理命令、许多文件系统和设备相关工具以及模块加载。唯一能够免除
/proc
的系统是非常小的单用途嵌入式系统,它们支持单一硬件配置并运行一组固定的程序。你可以相信它就在这里。

你需要程序的哪一部分?每进程信息还是通用内核信息?每个进程的信息在几个Unix变体(Plan9、Solaris、Irix、*BSD、Linux)和大范围的版本中看起来是相同的。一般系统信息是另一回事。对不起,我忘了提到应用程序只针对Linux(内核>=2.6)。我编辑了我的帖子。但是你需要从proc获得什么样的信息呢。因为它的各个部分都是单独记录的,质量也各不相同。最好尽可能多地访问可用的数据,这意味着每一份与质量水平无关的文件都会派上用场。我阅读邮件列表和提交日志没有问题,如果这就是它的意思:)应用程序应该正在做一些事情。尤哈