/proc/pid/fd/ - Dateideskriptoren
- /proc/PID/fd/
- In diesem Unterverzeichnis stehen die Dateideskriptoren der von diesem
Prozess geöffneten Dateien. Diese Einträge sind symbolische
Links zu den eigentlichen Dateien. Also ist 0 die Standardeingabe, 1 ist
die Standardausgabe, 2 ist der Standardfehlerkanal usw.
- Für Dateideskriptoren für Pipes und Sockets werden die
Einträge symbolische Links sein, deren Inhalt der Dateityp mit dem
Inode ist. Ein Aufruf von readlink(2) mit dieser Datei liefert eine
Zeichenkette im folgenden Format zurück:
-
Typ:[Inode]
- Beispielsweise wird socket:[2248868] ein Socket sein, dessen Inode
2248868 ist. Für Sockets kann dieser Inode dazu verwandt werden,
weitere Informationen in einem der Dateien unter /proc/net/ zu
finden.
- Für Dateideskriptoren, die keinen korrespondierenden Inode haben
(d.h. durch bpf(2), epoll_create(2), eventfd(2),
inotify_init(2), perf_event_open(2), signalfd(2),
timerfd_create(2) und userfaultfd(2) erstellte
Dateideskriptoren), wird der Eintrag ein symbolischer Link sein mit
Inhalten der Form
-
anon_inode:Dateityp
- In vielen (aber nicht allen) Fällen wird Dateityp durch
eckige Klammern eingeschlossen.
- Beispielsweise wird ein Epoll-Dateideskriptor einen symbolischen Link,
dessen Inhalt die Zeichenkette anon_inode:[eventpoll] ist,
haben.
- In einem Multithread-Prozess ist der Inhalt dieses Verzeichnisses nicht
mehr verfügbar, wenn der Haupt-Thread schon beendet ist
(typischerweise durch einen Aufruf von pthread_exit(3)).
- Programme, die einen Dateinamen als Befehlszeilen-Argument verarbeiten,
aber ohne Argument keine Eingaben aus der Standardeingabe annehmen oder
die in eine Datei schreiben, deren Name als Befehlszeilen-Argument
übergeben wird, aber bei fehlendem Argument nicht in die
Standardausgabe ausgeben, können dennoch mittels Dateien
/proc/PID/fd als Befehlszeilenargument dazu gebracht werden,
die Standardeingabe oder die Standardausgabe zu verwenden. Angenommen, der
Schalter -i bezeichnet die Eingabedatei und -o die
Ausgabedatei:
-
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 …
- und Sie haben einen funktionierenden Filter.
- /proc/self/fd/N ist in etwa dasselbe wie /dev/fd/N in
einigen UNIX- und UNIX-ähnlichen Systemen. Die meisten
MAKEDEV-Skripte legen tatsächlich symbolische Links von
/proc/self/fd zu /dev/fd an.
- Die meisten Systeme stellen die symbolischen Links /dev/stdin,
/dev/stdout und /dev/stderr bereit, die entsprechend auf die
Dateien 0, 1 und 2 in /proc/self/fd weisen.
Das letzte Beispiel könnte also auch alternativ geschrieben werden
als:
-
$ foobar -i /dev/stdin -o /dev/stdout …
- Die Rechte, die symbolischen Links in diesem Verzeichnis zu
dereferenzieren oder zu lesen (readlink(2)), werden von einer
Ptrace-Zugriffsmodusprüfung PTRACE_MODE_READ_FSCREDS
gesteuert; siehe ptrace(2).
- Beachten Sie, dass für Dateideskriptoren, die sich auf Inodes
beziehen (Pipes und Sockets, siehe oben), diese Inodes immer noch die von
den Einträgen /proc/PID/fd verschiedenen
Berechtigungsbits und Eigentümerinformationen haben und dass sich
der Eigentümer von den Benutzer- und Gruppenkennungen des Prozesses
unterscheiden kann. Einem nicht privilegierten Prozess könnten die
Rechte zum Öffnen fehlen, wie in diesem Beispiel:
-
$ echo test | sudo -u nobody cat
test
$ echo test | sudo -u nobody cat /proc/self/fd/0
cat: /proc/self/fd/0: Permission denied
- Dateideskriptor 0 bezieht sich auf die durch die Shell erzeugte und von
diesem Shell-Benutzer (dies ist nobody) besessene Pipe, so dass
cat nicht über die Berechtigungen verfügt, um einen
neuen Dateideskriptor zu erstellen, um von dieser Inode zu lesen, obwohl
es immer noch vom existierenden Dateideskriptor 0 lesen kann.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Dr. Tobias
Quathamer <toddy@debian.org>, Chris Leick <c.leick@vollbio.de>,
Erik Pfannenstein <debianignatz@gmx.de> und Helge Kreutzmann
<debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General
Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite
finden, schicken Sie bitte eine E-Mail an die Mailingliste der
Übersetzer:
debian-l10n-german@lists.debian.org.