GNU/Linux >> Linux の 問題 >  >> Linux

Linux – / 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はどのように機能しますか リンクは正確に機能しますか?

承認された回答:

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

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

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

tl; dr proc ファイルシステムの実装は、パス名の解決で独自の魔法を実行します。


Linux
  1. /proc/[pid]/pagemaps および /proc/[pid]/maps | Linux

  2. コマンドラインから Linux の CPU/コア数を取得する方法は?

  3. プロセスが実行されているフォルダーを見つける方法は?

  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. Linux – / procからインターフェイスのIpv4アドレスを取得する方法は?

  3. 一部の Linux システムでは、mtab でルート ファイルシステムが /dev/<実デバイス ノード> ではなく /dev/root として表示されるのはなぜですか?

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Linux – / proc/mntを/proc/ mountsにリンクしますか?

  3. Linux – / usr/binと/usr/sbinを/bin(gnu / linux)にマージしますか?