web-dev-qa-db-ja.com

/ proc / selfはLinuxにどのように実装されていますか?

Linuxの/procファイルシステムをいじくり回していて、現在のプロセスのプロセスディレクトリへのシンボリックリンクである/proc/selfに遭遇しました。実装方法を教えてください。 1つの解決策は、シンボリックリンクをすべてのコンテキストスイッチで変更することですが、ディスクアクセスを伴うため、明らかに非常にコストがかかります。

19
Vicky Chijwani

http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482 は現在の実装です。

procファイルシステムは完全に仮想であり、内部VFS readlinkが特別なシンボリックリンクの適切な場所に委任するように実装されています。そのため、すべてのコンテキストスイッチではなく、読み取り/トラバース時にselfが指す内容を計算します。

20
Daniel Pittman

/procのファイルはディスクに保存されず、カーネルによってその場で生成されます。 を参照してください/ procを開いて読み取るとどうなりますか?

プログラムに傾倒している場合は、/procの実装を カーネルソースコード で読むことができます。 /proc/self シンボリックリンクの内容は、呼び出しのpidでバッファを埋める function によって生成されます処理する。