Wie ist / proc / self in Linux implementiert?

19

Ich habe mit dem /procDateisystem unter Linux herumgebastelt und bin auf /proc/selfdieses Symbol gestoßen, das eine symbolische Verknüpfung zum Prozessverzeichnis des aktuellen Prozesses darstellt. Ich würde gerne wissen, wie es umgesetzt wird. Eine Lösung wäre, diesen Symlink bei jedem Kontextwechsel zu ändern , aber das ist offensichtlich sehr teuer, da es sich um einen Festplattenzugriff handelt.

Vicky Chijwani
quelle

Antworten:

20

http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482 ist die aktuelle Implementierung.

Das procDateisystem ist vollständig virtuell und so implementiert, dass das interne VFS readlinkfür spezielle Symlinks an die richtige Stelle delegiert wird. Es berechnet also, auf welche selfPunkte es zeigt, wenn es gelesen / durchlaufen wird, und nicht auf jeden Kontextwechsel.

Daniel Pittman
quelle
12

Dateien in /procwerden nicht auf einer Festplatte gespeichert, sondern vom Kernel im laufenden Betrieb generiert. Siehe Was passiert, wenn ich öffne und aus / proc lese?

Wenn Sie programmatisch geneigt sind, können Sie die Implementierung /procim Kernel-Quellcode lesen . Der Inhalt des /proc/selfsymbolischen Links wird von einer Funktion generiert , die einen Puffer mit der pid des aufrufenden Prozesses füllt.

Gilles 'SO - hör auf böse zu sein'
quelle