在/proc
文件系统中,为什么有些文件的maps
文件为空。是因为没有为它们分配内存或数据不可用吗?
必须为它们分配一些内存,否则它们是如何运行的?
答案 0 :(得分:1)
首先,请注意所有伪文件/proc/1234/maps
和/proc/self/maps
始终为零大小,如stat(2)系统调用和ls
命令所报告的那样。但是,它们是可依次读取的(例如,通过cat
命令,或通过read(2)系统调用,例如由fgets
调用。例如,请尝试cat /proc/self/maps
和ls -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.特别是,阅读它们应该很快。