GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wie unterscheidet sich der /proc//exe Symlink von gewöhnlichen Symlinks?

Wenn ich einen Prozess starte und dann die Binärdatei davon lösche, kann ich ihn immer noch von /proc/<pid>/exe wiederherstellen :

$ 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

Wenn ich andererseits selbst einen symbolischen Link erstelle, lösche das Ziel und versuche zu kopieren:

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

/proc ist eine Schnittstelle zum Kernel. Zeigt dieser symbolische Link also tatsächlich auf die im Speicher geladene Kopie, aber mit einem nützlicheren Namen? Wie funktioniert die exe Link funktioniert, genau?

Akzeptierte Antwort:

/proc/<pid>/exe folgt nicht der normalen Semantik für symbolische Links. Technisch könnte dies als Verletzung von POSIX gelten, aber /proc ist immerhin ein spezielles Dateisystem.

/proc/<pid>/exe scheint ein symbolischer Link zu sein, wenn Sie stat eingeben es. Dies ist eine praktische Möglichkeit für den Kernel, den ihm bekannten Pfadnamen für die ausführbare Datei des Prozesses zu exportieren. Aber wenn Sie diese „Datei“ tatsächlich öffnen, gibt es keine der normalen Prozeduren zum Lesen des folgenden Inhalts eines Symlinks. Stattdessen gewährt Ihnen der Kernel nur direkten Zugriff auf den geöffneten Dateieintrag.

Beachten Sie das, wenn Sie ls -l a /proc/<pid>/exe Pseudodatei für einen Prozess, dessen ausführbare Datei gelöscht wurde, hat das Symlink-Ziel die Zeichenfolge „(gelöscht)“ am Ende. Dies wäre normalerweise in einem Symlink unsinnig:Es gibt definitiv keine Datei, die im Zielpfad lebt und deren Name auf „(gelöscht)“ endet.

tl;dr Der proc Die Dateisystemimplementierung macht mit der Auflösung von Pfadnamen einfach ihre eigene magische Sache.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux – Wie bekomme ich die IPv4-Adresse für eine Schnittstelle von /proc?

  3. Wie finde ich heraus, aus welchem ​​Ordner ein Prozess läuft?

  4. Warum wird auf einigen Linux-Systemen das Root-Dateisystem als /dev/root statt als /dev/<realer Geräteknoten> in mtab angezeigt?

  5. Sollten Websites gemäß der empfohlenen Verwendung in /var/ oder /usr/ leben?

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wie erhalte ich den Pfad eines Prozesses in Unix / Linux

/proc/[pid]/pagemaps und /proc/[pid]/maps | Linux

Wie erhalte ich die Anzahl der CPUs/Kerne in Linux über die Befehlszeile?

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?