/ proc / <pid> / exeシンボリックリンクは通常のシンボリックリンクとどう違うのですか?


23

プロセスを開始してからそのバイナリを削除しても、次の場所から回復できます/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リンクは正確にどのように機能しますか?

回答:


19

/proc/<pid>/exeシンボリックリンクの通常のセマンティクスに従いません。技術的には、これはPOSIXの違反としてカウントされる場合が/procありますが、結局は特別なファイルシステムです。

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

あなたがいることに注意してください実行可能なプロセスのための疑似ファイルはそれの終わりに「(削除)」シンボリックリンクのターゲットは、文字列を持って削除されています。これは通常、シンボリックリンクでは無意味です。「(deleted)」で終わる名前のターゲットパスに存在するファイルは絶対にありません。ls -l/proc/<pid>/exe

TL; DRprocファイルシステムの実装は、単にパス名の解決に独自の魔法のことを行います。


1
そして魔法proc_exe_link()procファイルシステムにあります:lxr.free-electrons.com/source/fs/proc/base.c?v
Stephen Kitt

そのような名前のファイルが存在しないことをどうやって知っていますか?誰かが実験として作成したかもしれません。前に一度やったことがあります。他の理由で存在する可能性は非常に低いですが、不可能ではありません。
flarn2006

4

/ procのmanページによると、Linux 2.2以降では、ファイルは実行されたコマンドの実際のパス名を含むシンボリックリンクです。どうやら、バイナリはメモリにロードされ、メモリ内/proc/[pid]/exeのバイナリのコンテンツを指します

一方、Linux 2.0以前で/proc/[pid]/exeは、明らかに実行された(ファイルシステム内の)ファイルへのポインタです。

したがって、Linux 2.0以前で同じコマンドのリストを実行した場合、「no such file or directory」というエラーが表示されると思われます。


どのマンページですか?linux.die.net/man/5/procおよびmanpages.ubuntu.com/manpages/utopic/en/man5/proc.5.htmlは「それを開こうとすると実行可能ファイルが開かれます」と言うが、どこにあるかは述べていないから来た。
ムル

1
カーネルは、メモリ内コピーではなく、バイナリのiノードの内容を提供するものと確信しています。インメモリコピーには、ファイルのすべてのセクションが含まれることはほとんどありません。一方、iノードは参照カウントされ、参照が存在する間は上書きされません。カーネルは、必要に応じて追加のセクションをロードできるように、実行ファイルへの参照を保持します。
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.