当我打开并读取 /proc 时会发生什么?

flu*_*mpb 14 monitoring system-information proc

是否需要访问硬盘驱动器还是所有操作都在内存中完成?基本上我想不断从 meminfo 和 cpuinfo 获取更新的值。

我是否需要重新打开文件然后重新读取才能获得更新的值,还是可以重新读取?我目前无法访问 Linux 安装。

Gil*_*il' 14

当您从 中读取时/proc,内核会即时生成内容。不涉及硬盘驱动器。

您所做的与许多监控程序所做的相似,因此我建议您查看它们在做什么。例如,您可以看到 top 的作用:

strace top >/dev/null
Run Code Online (Sandbox Code Playgroud)

跟踪显示顶部打开/proc/uptime/proc/loadavg/proc/stat/proc/meminfo一劳永逸。对于除 之外的所有这些文件/proc/uptime,top 会返回到(虚拟)文件的开头并在每次刷新显示时再次读取。

里面的大部分数据/proc/cpuinfo是不变的,但是一些字段比如一些机器上的CPU速度是动态更新的。

proc 文件系统记录在内核文档中,Documentation/filesystems/proc.txt. 如果您对某些深奥的细节感到绝望,可以浏览源代码


wzz*_*zrd 6

/proc 文件系统是所谓的“伪文件系统”,这意味着(afaiu)没有磁盘使用。

我不太确定这在最低级别是如何工作的,所以我可能是错的,但这里是。如果我跑

f = open('/proc/meminfo')
f.read()
f.seek(0)
f.read()
Run Code Online (Sandbox Code Playgroud)

我得到两个不同的输出。Afaik,seek(0) 只重置读取偏移量,它不会重新打开文件。这表明重新读取文件足以获得新值。

也就是说,如果您正在为 Linux 开发,那么永久访问 Linux box 似乎是一件非常合乎逻辑的事情......

  • 我认为您将“虚拟文件系统”与“伪文件系统”混淆了。`/proc` 是一个`伪文件系统`。`虚拟文件系统(VFS)`详细解释[这里](http://en.wikipedia.org/wiki/Virtual_file_system) (2认同)