gpt4 book ai didi

linux - 访问/处理

转载 作者:太空狗 更新时间:2023-10-29 11:05:50 26 4
gpt4 key购买 nike

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

该应用程序将在 Linux(内核 >= 2.6)上运行,而不是在任何其他 Unix 风格的操作系统上运行。它应该可以访问/proc 中的任何数据,我现在不能说什么是必需的,因为规范尚不清楚,但整个/proc 目录与应用程序相关。


首先:是否有一个很好的文档涵盖了从内核版本到内核版本添加/删除的所有功能?我特别好奇的一件事是各个文件的格式。我可以认为这是理所当然的吗?它在内核版本之间会发生变化吗?

连接基于内核的解析过程根本不是问题,只是我找不到任何关于版本之间变化的好文档,这可以帮助我事先捕获解析错误。


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

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


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


最后但同样重要的是:有没有没有安装过程的主要发行版?

据我了解,很多常用工具都是基于/proc 接口(interface)的,例如 lsmodfree,所以我猜我可以期待/proc 几乎总是存在。

最佳答案

/proc 接口(interface)非常稳定(与/sys 接口(interface)不同),即使没有任何保证。几乎所有更改都是向后兼容的,至少如果它们已经存在了几个版本。你应该为了安全起见,坚持使用文档化的接口(interface)。如果文件存在,其格式可能会在以后的版本中扩展,但通常以向后兼容的方式,例如向表中添加列。最有可能消失的部分是与硬件系统有关的部分,例如 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 的系统是非常小的单一用途嵌入式系统,它们支持单一硬件配置并运行一组固定的程序。你可以指望它在这里。

关于linux - 访问/处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7413445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com