/proc/ どのように/exeシンボリックリンクは通常のシンボリックリンクとどう違いますか?

/proc/ どのように/exeシンボリックリンクは通常のシンボリックリンクとどう違いますか?

プロセスを開始してからそのバイナリを削除しても、以下から復元できます/proc/<pid>/exe

$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe                           
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe 
  File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
  Size: 0           Blocks: 0          IO Block: 1024   symbolic link

一方、私が直接シンボリックリンクを作成している場合は、ターゲットを削除してコピーしてみてください。

cp: cannot stat ‘sleep’: No such file or directory

/procカーネルのインタフェースです。それでは、このシンボリックリンクは実際にメモリにロードされたコピーを指していますが、より有用な名前を持っていますか?このリンクは正確にどのようにexe機能しますか?

答え1

/proc/<pid>/exeシンボリックリンクの一般的な意味に従わない。技術的にはこれはPOSIX違反と見なすことができますが、/proc最終的には特別なファイルシステムです。

/proc/<pid>/exe使用するとシンボリックリンクのように見えますstat。これは、カーネルが知っているプロセス実行可能ファイルのパス名をエクスポートする便利な方法です。しかし、実際にその「ファイル」を開くと、シンボリックリンクの下の内容を読む一般的なプロセスはありません。代わりに、カーネルは開いているファイルエントリへの直接アクセスのみを提供します。

ls -l実行可能ファイルが削除されたプロセスのダミーファイルを生成すると、/proc/<pid>/exeシンボリックリンクターゲットの末尾に「(削除済み)」という文字列があります。これは通常、シンボリックリンクでは意味がありません。名前が「(削除済み)」で終わるファイルは、確実に宛先パスには存在しません。

長すぎます。ファイルシステムのproc実装は、パス名解決を通じて独自の魔法を実行します。

答え2

/ procのマニュアルページによると、Linux 2.2以降では、このファイルは実行されたコマンドの実際のパス名を含むシンボリックリンクです。明らかに、バイナリはメモリにロードされ、/proc/[pid]/exeバイナリの内容を指します。記憶の中

一方、Linux 2.0 以前では/proc/[pid]/exe明らかに次の点があります。文書(ファイルシステム上)が実行されます。

したがって、Linux 2.0 以前のバージョンで同じコマンドのリストを実行すると、「該当するファイルやディレクトリがありません」というエラーが表示されることがあります。

答え3

すべてのファイルは/proc要求時に生成されます。したがって、時には通常のファイルとは少し異なる動作をします。

たとえば、多くのファイルが/procディレクトリリストにサイズ 0 の汎用ファイルとして表示されます。しかし、読んでみると空ではありません。その理由は、ファイルの内容が要求時に生成されるためです。内容は、時間の経過とともに変更されるか、ファイルを開いたプロセスによって異なります。したがって、ファイルを開いて読み取らずに内容のサイズを知る方法はありません。

/proc/<pid>/exeカーネル内で開かれたファイル記述への参照です。開いたファイルの説明を正確に渡す方法はありません。これはカーネル内のデータ構造です。したがって、カーネルはこれをおおよその方法、つまりファイルへのシンボリックリンクとして表現します。抽象ファイルシステム階層で維持する情報のおかげで、カーネルはファイル名を記憶し、ファイル名が変更されてもファイルを追跡します。ファイルが削除されると、カーネルは知っている姓を覚えて(deleted)名前に追加します。シンボリックリンクターゲットに返された文字列は、readlinkプロセスが呼び出されるたびに動的に生成されます。後で開いた/proc/<pid>/exeショートカットは、一般的なシンボリックリンクの確認を実行し、ファイルの説明を直接開きます。/proc/<pid>/fd/<number>/proc/<pid>/cwdおよび/proc/<pid>/root他の同様のリンクにも同様に適用されます。

「魔法の」シンボリックリンクの別の例はです/proc/self。これは動的に作成され、/proc/<pid>それにアクセスするプロセスのディレクトリを指します。

関連情報