访问/proc

3

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

该应用程序将在Linux(内核> = 2.6)上运行,而不是其他任何Unix风格的操作系统。它应该可以访问/proc中的任何数据,由于规格尚不清楚,因此现在无法确定哪些数据是必要的,但整个/proc目录与该应用程序相关。


首先:是否有良好的文档涵盖了从内核版本到内核版本添加/删除的所有功能?特别感兴趣的是单个文件的格式。我能否认为这是理所当然的?它在内核版本之间是否会改变?

基于内核的解析过程不会成为问题,只是我找不到任何有关从版本到版本已更改的内容的良好文档,这可以帮助我提前捕获解析错误。


此外:是否有明确的功能列表可以通过内核选项激活/停用(除了/proc功能本身)?我正在寻找仅在设置了适当选项的情况下才存在的文件/目录列表。

作为我考虑的示例,这是一个指向proc manpage的链接(http://linux.die.net/man/5/proc),其中包括很多有用的信息,例如某些选项包括它们在最早的内核版本中可用,某些选项包括是否需要加载模块。然而,这并没有描述所有信息的输出格式,如果我想解析它(例如它在所有内核版本中是否保持一致或在某个时候发生了变化),这是我需要的。


我想知道的第二件事是,如果查询的进程在查询时死亡会发生什么。我的时间间隔是什么?例如,如果我要获取进程列表以读取所有结构,并逐个解析它们,如果我的进程x在我读取它之前死亡会发生什么?即使我检查目录是否存在,它下次应用程序调用时也可能已经消失。


最后但并非最不重要的:是否有任何主要分发版未挂载proc?

据我所了解,许多常见工具都基于/proc接口,例如lsmodfree,因此我猜可以几乎总是期望/proc存在。


你需要 proc 的哪一部分?是每个进程的信息还是通用内核信息?每个进程的信息在几个 Unix 变体(Plan9、Solaris、Irix、*BSD、Linux)和大量版本中都是相同的。而通用系统信息则另当别论。 - Jan Hudec
抱歉,我忘了提到这个应用程序只针对Linux(内核> = 2.6)。我已经编辑了我的帖子。 - Robin
你需要从proc获取哪种类型的信息?因为它的各个部分分别记录在不同的地方,而且记录的质量也不同。 - Jan Hudec
最好尽可能访问所有可用的数据,这意味着每个文档都有用,无论其质量如何。如果需要,我可以阅读邮件列表和提交日志 :) - Robin
应用程序应该在做某些事情。你有什么想法,那么你应该知道你想要什么信息。 - Jan Hudec
我还没有应用程序的规格,但从讨论中可以看出整个/proc目录是相关的。正如我所说,最好尽可能访问/proc下可用的所有数据。应用程序本身的性质与问题无关,这只涉及解析/访问proc。 - Robin
1个回答

5
“/proc”接口相当稳定(不像“/sys”接口),即使没有任何保证。几乎所有更改都是向后兼容的,至少如果它们已经存在了几个版本。为了安全起见,您应该坚持使用文档化的接口。如果文件存在,则其格式可能会在以后的版本中进行扩展,但通常是向后兼容的方式,例如向表格添加列。最有可能消失的部分是涉及硬件子系统的部分,例如ACPI或SCSI,这些部分正在迁移到“/sys”(同时存在一个长期过渡期)。
大多数信息与体系结构无关,除了硬件信息(例如,“/ proc / cpuinfo”在不同架构上具有非常不同的字段)。
主要文档在内核源代码中的Documentation/filesystems/proc.txt。将proc(5)视为概述,proc.txt是详细信息。内核文档通常不完整,因此如果需要,可能需要阅读源代码。大多数可选的/proc部分默认情况下会被激活,如果公开其数据的驱动程序包含在内核中。例外情况主要与硬件功能有关,这些功能很少需要从内核外部访问;如果需要访问这些功能,则可能已经预期需要深入挖掘。在内核源代码中查找Kconfig文件以获取详细信息。
进程数据(或与可移动硬件相关的硬件数据或由不可卸载的模块提供的数据)可能会在你眼皮底下消失。大多数位于/proc下的文件可以被原子地读取,只需使用具有合理大小缓冲区的单个read调用; 如果您连续执行多个read调用,则驱动程序应保证您获得格式正确的数据。无法保证分别读取不同文件之间的原子性;如果您正在读取有关进程的信息,此进程可以随时死亡,并且原则上甚至可能在您完成之前被另一个具有相同PID的进程替换。
正如/proc的描述中所说,“每个人都应该在这里说Y”。所有桌面/服务器Linux系统和大多数嵌入式Linux系统必须有/proc;许多工具,包括ps和其他进程管理命令,许多文件系统和设备相关工具以及模块加载,都需要它。唯一可能能够省去/proc的系统是支持单个硬件配置并运行固定程序集的非常小的单用途嵌入式系统。您可以信赖它会在这里。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接