- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在开发一个需要大量系统和进程信息的应用程序,其中一些只能通过/proc 获得,而且我有一些关于访问这些结构的一般性问题。
该应用程序将在 Linux(内核 >= 2.6)上运行,而不是在任何其他 Unix 风格的操作系统上运行。它应该可以访问/proc 中的任何数据,我现在不能说什么是必需的,因为规范尚不清楚,但整个/proc 目录与应用程序相关。
连接基于内核的解析过程根本不是问题,只是我找不到任何关于版本之间变化的好文档,这可以帮助我事先捕获解析错误。
此外:是否有明确的功能列表可以通过内核选项激活/停用(当然/proc-feature 本身除外)?我正在寻找一个文件/目录列表,这些文件/目录只存在于内核中设置了适当的选项。
作为我所想的例子,这是一个指向 proc 联机帮助页 (http://linux.die.net/man/5/proc) 的链接,其中包含很多有用的信息,例如一些选项包括它们可用的最早内核版本,一些包括是否需要加载模块。但这并没有描述所有信息的输出格式,如果我想解析它,这是我需要的(例如,如果它在所有内核版本中都是一致的或在某些时候发生了变化)。
我想知道的第二件事是如果被查询的进程在被查询时死亡会发生什么。我的时间间隔是多少?例如,如果我要获取读取所有结构的进程列表,并一个接一个地解析它们,如果我的进程 x 在我读取它之前就死了会怎样?即使我检查该目录是否存在,它仍然可能在一个应用程序调用之后消失。
最后但同样重要的是:有没有没有安装过程的主要发行版?
据我了解,很多常用工具都是基于/proc 接口(interface)的,例如 lsmod
或 free
,所以我猜我可以期待/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/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!