NOM

getpid, getppid - Obtenir l'identifiant d'un processus

BIBLIOTHÈQUE

Bibliothèque C standard ( libc, -lc)

SYNOPSIS

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

DESCRIPTION

getpid() renvoie l'identifiant du processus appelant (cela est souvent utilisé par des routines qui génèrent des noms de fichier temporaire uniques).
getppid() renvoie l'ID du processus parent de celui appelant. Il s'agira soit de l'ID du processus qui a créé ce processus en utilisant fork(), soit, si ce processus s'est déjà terminé, de l'ID du processus auquel il a été réaffilié ( init(1) ou un processus « subreaper » défini avec l'opération PR_SET_CHILD_SUBREAPER de prctl(2)).

ERREURS

Ces fonctions réussissent toujours.

STANDARDS

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

NOTES

Si le parent de l'appelant est dans un espace de noms de PID différent (voir pid_namespaces(7)), getppid() renvoie 0.
Du point de vue du noyau, le PID (qui est partagé par tous les threads dans un processus multithreads) est parfois connu sous l'ID du groupe du thread (TGID). Cela contraste avec l'ID du thread (TID) du noyau qui est unique pour chaque thread. Pour plus de détails, voir gettid(2) ou le point sur l'attribut CLONE_THREAD dans clone(2).

différences entre bibliothèque C et noyau

De la glibc 2.3.4 jusqu'à la glibc 2.24 incluse, la fonction enveloppe de la glibc pour getpid() faisait un cache des PID, de façon à éviter des appels système supplémentaires quand un processus appelle getpid() de façon répétée. Normalement, cette mise en cache n'était pas visible, mais son fonctionnement correct reposait sur la gestion du cache dans les fonctions enveloppes pour fork(2), vfork(2) et clone(2) : si une application se passait des enveloppes de la glibc pour ces appels système en appelant syscall(2), alors un appel à getpid() dans l'enfant renvoyait la mauvaise valeur (pour être précis : il renvoyait le PID du processus parent). En outre, il y avait des cas où getpid() renvoyait la mauvaise valeur même avec un appel clone(2) par la fonction enveloppe de la glibc (voir BOGUES de clone(2) pour un point sur ce cas). De plus, la complexité du code de mise en cache était devenue, au fil des années, la source de quelques bogues dans la glibc.
Du fait des problèmes susmentionnés, depuis la glibc version 2.25, le cache du PID est retiré : les appels à getpid() appellent toujours le vrai appel système au lieu de renvoyer une valeur mise en cache.
Sur Alpha, au lieu d'une paire d'appels système getpid() et getppid(), un seul appel getxpid() est fourni, qui renvoie une paire PID et PID parent. Les fonctions enveloppes getpid() et getppid() de la glibc gèrent cela de manière transparente. Voir syscall(2) pour des détails sur les tableaux de registre.

VOIR AUSSI

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

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <[email protected]>, Thierry Vignaud <[email protected]>, François Micaux, Alain Portal <[email protected]>, Jean-Philippe Guérard <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Thomas Huriaux <[email protected]>, Nicolas François <[email protected]>, Florentin Duneau <[email protected]>, Simon Paillard <[email protected]>, Denis Barbier <[email protected]>, David Prévot <[email protected]>, Cédric Boutillier <[email protected]>, Frédéric Hantrais <[email protected]> et Jean-Philippe MENGUAL <[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à [email protected]