/proc
ファイル システムで、一部のファイルのファイルが空になるのはなぜですかmaps
。それらにメモリが割り当てられていないか、データが利用できないためですか?
メモリを割り当てる必要があります。そうしないと、どのように実行されますか?
まず、 stat(2) syscallとコマンドによって報告されるように、すべての疑似ファイル/proc/1234/maps
と/proc/self/maps
のサイズが常にゼロであることに注意してください。ただし、それらは順番に読み取ることができます(たとえば、コマンドによって、またはread(2) syscallを使用して、たとえばによって呼び出されます)。たとえば、試してみてください。ls
cat
fgets
cat /proc/self/maps
ls -ls /proc/self/maps
ファイルのサイズが0であると考えられる理由は、/proc/*/maps
ファイルのサイズを計算することはコンテンツを計算することを意味し、コストがかかる可能性があるためです。したがって、カーネルはサイズとして0と言うことを好みます。それらを一種のパイプと考えてください。それらを順番に読む必要があります。lseek(2)には対応していません。
;の詳細については、proc(5)のマニュアルページを参照してください。Unixのパーミッションと所有権を使用しているため、pid1234のプロセスが自分のものでない場合はディレクトリに/proc/
アクセスできないことに注意してください。/proc/1234
また、ゾンビプロセスがいくつかある場合もあります。これらにはアドレス空間がもうないので、それらのmaps
疑似ファイル/proc
が本当に空であるか(それを読み取るとすぐにファイルの終わりの状態になるという意味で)、あるいは欠落していても驚かないでしょう。
下/proc
のファイルは、カーネルがそれらを提供している(そしてそれらのデータを提供している)という意味で疑似ファイルであり、実際のディスクI/Oを含まないことに注意してください。特に、それらを読むことは速くなければなりません。