1

/procファイル システムで、一部のファイルのファイルが空になるのはなぜですかmaps。それらにメモリが割り当てられていないか、データが利用できないためですか?

メモリを割り当てる必要があります。そうしないと、どのように実行されますか?

4

1 に答える 1

2

まず、 stat(2) syscallとコマンドによって報告されるように、すべての疑似ファイル/proc/1234/maps/proc/self/mapsのサイズが常にゼロであることに注意してください。ただし、それらは順番に読み取ることができます(たとえば、コマンドによって、またはread(2) syscallを使用して、たとえばによって呼び出されます)。たとえば、試してみてください。lscatfgetscat /proc/self/mapsls -ls /proc/self/maps

ファイルのサイズが0であると考えられる理由は、/proc/*/mapsファイルのサイズを計算することはコンテンツを計算することを意味し、コストがかかる可能性があるためです。したがって、カーネルはサイズとして0と言うことを好みます。それらを一種のパイプと考えてください。それらを順番に読む必要があります。lseek(2)には対応していません。

;の詳細については、proc(5)のマニュアルページを参照してください。Unixのパーミッションと所有権を使用しているため、pid1234のプロセスが自分のものでない場合はディレクトリに/proc/アクセスできないことに注意してください。/proc/1234

また、ゾンビプロセスがいくつかある場合もあります。これらにはアドレス空間がもうないので、それらのmaps疑似ファイル/procが本当に空であるか(それを読み取るとすぐにファイルの終わりの状態になるという意味で)、あるいは欠落していても驚かないでしょう。

/procのファイルは、カーネルがそれらを提供している(そしてそれらのデータを提供している)という意味で疑似ファイルであり、実際のディスクI/Oを含まないことに注意してください。特に、それらを読むことは速くなければなりません。

于 2012-11-06T13:13:31.243 に答える