getpid(2) System Calls Manual getpid(2) BEZEICHNUNG getpid, getppid - gibt die Prozessidentifikation zuruck BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include pid_t getpid(void); pid_t getppid(void); BESCHREIBUNG getpid() gibt die Prozesskennung (PID) des aufrufenden Prozesses zuruck. (Dies wird oft von Routinen benutzt, die einen eindeutigen Namen einer temporaren Datei erzeugen.) getppid() liefert die Prozesskennung des Elternprozesses des aufrufenden Prozesses zuruck. Dies wird entweider die Kennung des Prozesses, der diesen Prozess mittels fork() erstellte, oder, falls dieser Prozess bereits beendet wurde, die Kennung des Prozesses, an der neue Elternprozess fur diesen Prozess geworden ist (entweder init(1) oder ein mittels der Aktion prctl(2) PR_SET_CHILD_SUBREAPER definierter >>subreaper<<-Prozess). FEHLER Diese Funktionen sind immer erfolgreich. VERSIONEN Unter Alpha wird statt eines Paars von getpid()- und getppid()-Systemaufrufen ein einzelner Systemaufruf getxpid() bereitgestellt, der ein Paar von realen und effektiven PIDs bereitstellt. Die Glibc-Wrapper-Funktionen getpid() und getppid() gehen damit transparent um. Siehe syscall(2) fur Details im Hinblick auf Registerabbildungen. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, 4.3BSD, SVr4. Unterschiede C-Bibliothek/Kernel Von Glibc 2.3.4 bis einschliesslich 2.24 speicherte die Glibc-Wrapper-Funktion fur getpid() PIDs temporar, um zusatzliche Systemaufrufe zu vermeiden, wenn ein Prozess getpid() mehrmals aufruft. Normalerweise war dieses Zwischenspeichern nicht sichtbar, aber das korrekte Funktionieren beruhte auf der Unterstutzung in den Wrapper-Funktionen fur fork(2), vfork(2) und clone(2): Wenn eine Anwendung die Glibc-Wrapper fur diese Systemaufrufe durch Benutzung von syscall(2) umging, dann wurde ein Aufruf von getpid() im Kindprozess den falschen Wert zuruckliefern (um es zu prazisieren: Er wird die PID des Elternprozesses zuruckgeben). Zusatzlich gab es Falle, bei dem getpid() den falschen Wert sogar dann zuruckgab, wenn clone(2) uber die Glibc-Wrapper-Funktion aufgerufen wurde. (Fur die Besprechung eines solchen Falles siehe FEHLER in clone(2).) Desweiteren war die Komplexitat des Zwischenspeichercodes uber die Jahre eine Quelle mehrerer Fehler innerhalb der Glibc. Aufgrund der vorgenannten Probleme ist der PID-Zwischenspeichercode seit Glibc 2.25 entfernt; Aufrufe von getpid() losen immer den tatsachlichen Systemaufruf aus, statt einen zwischengespeicherten Wert zuruckzuliefern. ANMERKUNGEN Falls sich der Elternprozess des aufrufenden Prozesses in einem anderen PID-Namensraum befindet (siehe pid_namespaces(7)), gibt getppid() 0 zuruck. Aus der Sicht des Kernels ist die PID (die sich alle Threads in einem Multithreaded-Prozess teilen) manchmal auch als Thread-Gruppenkennung (TGID) bekannt. Dies steht im Gegensatz zu der Kernel Thread ID (TID), die fur jeden Thread eindeutig ist. Fur weitere Details siehe gettid(2) und die Diskussion des Schalters CLONE_THREAD in clone(2). SIEHE AUCH clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3), credentials(7), pid_namespaces(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Stefan Janke , Chris Leick , Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 getpid(2)