在Linux上多长时间更新一次proc文件系统?


Answers:


46

您从proc文件系统读取的信息没有存储在任何介质上(甚至没有存储在RAM中),因此没有任何要更新的信息。

proc文件系统的目的是允许用户空间程序获得或使用简单和熟悉的文件系统语义集内核数据(openclosereadwritelseek),即使已读取或写入的数据不驻留在任何介质。与实现诸如ASN1编码的OID之类的东西一样,这种设计决策被认为比获取诸如ASN1编码的OID之类的更好的方法(例如,人类可读的和易于编写脚本的)对于获取和设置其格式无法预先指定的数据更好。

从proc文件系统读取时看到的数据是从文件开头读取时即时生成的。也就是说,进行读取会使数据由特定于您正在读取的文件的内核回调函数生成。做一个lseek对文件的开头,并再次读取导致另一个调用该再次生成数据的回调。同样,当您在proc文件系统中写入可写文件时,将调用回调函数来解析输入并设置内核变量。原始格式的输入数据不会存储。

以上只是说豪克·劳金如此简洁地陈述的一种较为冗长的方式。我建议你接受他的回答。


如果您需要证明这个答案是正确的,请尝试在/ proc(或/ sys)中的“文件”或目录上运行inotify ...太糟糕了,如果您可以告诉udev,则完全不需要udev当某物出现在y中时,一个简单的inotify程序即可运行x
Technosaurus

24

每次访问都会更新。您会在那时看到内核的状态。这就是显示“文件”的大小不是实际大小的原因。实际大小可以更改,并在您访问文件时确定。

您可能会说,它可能几天都没有更新。如果您不看它。:-)


10
+1。有点像这样的说法:“如果一棵树掉在森林里,没人在周围听到它,它发出声音吗?”,即“如果有一个proc文件系统并且没有人读取它,它是否存在? ?”。
乔纳森·本·阿夫拉罕

@ JonathanBen-Avraham您可以说每个FS,不是吗?:-)但是请记住,对proc的访问比人们想像的要多得多。在fstab中注释掉它,重新启动,然后所有地狱都松散了……
Hauke Laging

我的意思是,即使没有人在任何特定时刻读取数据,也存在介质支持的文件系统中的数据。在像proc和sys这样的阅读时,它并不存在。您是对的,proc有很多读者。但是,sys是一个类似的文件系统,您可以从fstab注释掉,至少在较小的系统上仍可以运行。干杯。
乔纳森·本·阿夫拉罕

4
那猫死了还是没死?看一看。吉姆死了。可怜的猫。
0x7c0 2013年

@HaukeLaging人,我没有/proc/在我的fstab文件☹
高新天使
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.