getpid, getppid - Obtenir l'identifiant d'un processus
Bibliothèque C standard (
libc,
-lc)
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
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)).
Ces fonctions réussissent toujours.
POSIX.1-2001, POSIX.1-2008, 4.3BSD, SVr4.
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).
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.
clone(2),
fork(2),
gettid(2),
kill(2),
exec(3),
mkstemp(3),
tempnam(3),
tmpfile(3),
tmpnam(3),
credentials(7),
pid_namespaces(7)
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]