某些进程的映射文件为空

时间:2012-11-06 12:39:57

标签: linux process

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

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

1 个答案:

答案 0 :(得分:1)

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

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

阅读proc(5)手册页,详细了解/proc/;注意它正在使用Unix权限和所有权,因此如果pid 1234的进程不属于您,则无法访问/proc/1234目录。

你可能还有一些zombie processes。这些不再具有任何地址空间,所以如果maps中的/proc伪文件真的为空(在某种意义上说,它会立即显示为空),我不会感到惊讶文件结束条件),甚至丢失。

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