2012-11-06 31 views
0

/proc文件系統中,爲什麼某些文件的maps文件爲空。是否因爲沒有內存分配給它們或數據不可用?某些進程的映射文件爲空

它們必須分配一些內存,否則它們如何運行?

回答

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) -able。

有關/proc/的詳細信息,請閱讀proc(5)手冊頁;請注意,它使用的是Unix權限和所有權,因此如果pid 1234的進程不是您的,則無法訪問/proc/1234目錄。

而且你也可能有一些zombie processes。這些地址空間不再有任何地址空間,所以如果maps中的maps僞文件真的是空的(即讀取文件立即生成文件結束條件)或甚至丟失,我不會感到驚訝。

請記住,在/proc下的文件是僞文件,即內核正在提供它們(並提供它們的數據),並且它們不涉及任何實際的磁盤I/O。尤其是,閱讀它們應該很快。