1

/proc文件系统中,为什么有些文件的maps文件是空的。是因为没有分配内存或数据不可用?

必须为它们分配一些内存,否则它们是如何运行的?

4

1 回答 1

2

首先,请注意所有伪文件/proc/1234/maps/proc/self/maps大小始终为零,正如stat(2)系统调用和ls命令所报告的那样。但是,它们是顺序可读的(例如通过cat命令,或使用read(2)系统调用,例如由 调用fgets)。试一试cat /proc/self/mapsls -ls /proc/self/maps例如。

文件大小为 0的一个可能原因/proc/*/maps是计算它们的大小意味着计算它们的内容,这可能会很昂贵。所以内核更喜欢说 0 来表示它们的大小。把它们想象成某种管道。您需要按顺序阅读它们,它们不是lseek(2) -able。

阅读proc(5)手册页以了解有关/proc/; /proc/1234请注意,它使用的是 Unix 权限和所有权,因此如果 pid 1234 的进程不是您的,您将无法访问目录。

而且你可能还有一些僵尸进程。它们不再有任何地址空间,所以如果它们的maps伪文件/proc真的是空的(从某种意义上说,读取它会立即给出文件结束条件),甚至丢失,我不会感到惊讶。

请记住,/proc在内核提供它们(并提供它们的数据)的意义上,下面的文件是伪文件,它们不涉及任何真正的磁盘 I/O。特别是,阅读它们应该很快。

于 2012-11-06T13:13:31.243 回答