GETPID(2) Linux Programmeurs Handleiding GETPID(2)

getpid, getppid - verkrijg proces identiteit

#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);

getpid() geeft het proces ID terug van het huidige proces. (Dit wordt vaak gebruikt door routines die unieke tijdelijke bestandsnamen maken.)

getppid geeft het proces ID van de ouder van het aanroepende proces terug. Dat zal ofwel het ID van het proces zijn dat het proces aanmaakte door fork(2), of, als dat proces al werd beëindigt, het ID van het proces aan welk ouder-proces het werd vastgemaakt (ofwel init(1) of een "subreaper" proces zoals gedefinieerd via de prctl(2) PR_SET_CHILD_SUBREAPER operatie).

Deze functies slagen altijd.

POSIX.1-2001, POSIX.1-2008, 4.3BSD, SVr4.

Als de ouder van de aanroeper in een andere PID naamgebied zit (zie pid_namespaces(7)), dan geeft getppid() 0 terug.

Vanuit kernel perspectief is de PID (die wordt gedeeld door alle threads in een multi-threaded proces) ook bekend als een thread groep ID (TGID). Dit in tegenstelling tot de kernel thread ID (TID), die unique is voor elke thread. Voor meer details, zie gettid(2) en de discussie over de CLONE_THREAD vlag in clone(2).

Vanaf glibc versie 2.3.4 tot en met versie 2.24, cachte de glibc omwikkel functie voor getpid() PID´s, met als doel het voorkomen van additionele systeem aanroepen wanneer een proces getpid() herhaaldelijk zou aanroepen. Normaliter was het caching onzichtbaar maar de correctie werking vertrouwde op ondersteuning in de omwikkel functies voor fork(2), vfork(2), en clone(2): zodra een applicatie de glibc omwikkel functie omzeilde door aanroep van syscall(2) dan zou de aanroep van getpid() in het kind de verkeerde waarde teruggegeven hebben (om precies te zijn: die zou de PID van het ouder proces terug geven). Additioneel, waren er gevallen waar getpid() de verkeerde waarde kon terug geven zelfs bij het aanroepen van clone(2) via de glibc omwikkel functie. (Zie BUGS in clone(2) voor een discussie over zo´n geval). Verder is de complexiteit van de caching code een bron van enkele bugs in glibc geweest gedurende de tijd.

Vanwege de voorgenoemde problemen werd vanaf glibc versie 2.25 de PID cache verwijderd: aanroepen van getpid() roepen ook de daadwerkelijke systeem aanroep aan, in plaats van het teruggeven van een gecachte waarde.

Op Alpha wordt voorzien in een enkele getxpid() systeem aanroep, die het paar PID en ouder PID terug geeft, in plaats van een paar van geitpid() en getppid() systeem aanroepen. De glibc getpid() en getppid() omwikkel functies handelen dit transparant af. Zie syscall(2) voor details betreffende de register indeling.

clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3), credentials(7), pid_namespaces(7)

Deze pagina is onderdeel van release 5.13 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

22 maart 2021 Linux