Provided by:
manpages-fr_1.67.0-1_all 
NOM
pthread_atfork - enregistre des gestionnaires à invoquer lors de
l’appel à fork(2)
SYNOPSIS
#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void), void
(*child)(void));
DESCRIPTION
pthread_atfork enregistre les fonctions à appeler juste avant et juste
après la création d’un nouveau processus par fork(2). Le gestionnaire
prepare est appelé par le processus parent juste avant la création du
nouveau processus. Le gestionnaire parent est appelé par le processus
parent juste avant que fork(2) finisse. Le gestionnaire child est
appelé par le processus fils juste avant la fin de l’appel fork(2).
L’un ou plusieurs des trois gestionnaires prepare, parent et child peut
être affecté à NULL, ce qui signifie qu’aucun gestionnaire ne sera
appelé au moment correspondant.
pthread_atfork peut être appelée plusieurs fois pour enregistrer
plusieurs ensembles de gestionnaires. Lors de l’appel à fork(2), les
gestionnaires prepare sont appelés dans l’orde LIFO (Last In First
Out : dans l’ordre inverse de l’enregistrement) juste avant fork, alors
que les gestionnaires parent et child sont appelés dans l’ordre FIFO
(First In First Out : dans l’ordre d’enregistrement).
Pour comprendre l’objectif de pthread_atfork, rappelons que fork(2)
copie toute l’image mémoire du processus, y compris ses mutex dans leur
état de bloquage courant, mais seulement le thread couran t: les autres
threads ne s’exécutent pas dans le processus fils. Donc, si un mutex
est pris par un autre thread que celui ayant appelé fork, ce mutex
restera bloqué pour toujours dans le processus fils. Il est même
possible que l’exécution du processus fils se bloque sur ce mutex. Afin
d’éviter ceci, il faut installer des gestionnaires avec pthread_atfork
comme ceci : le gestionnaire prepare prend le mutex global et les
gestionnaires parent et child le débloquent (dans l’ordre inverse).
Autre possibilité, prepare et parent peuvent être initialisés à NULL et
child est une fonction qui appelle pthread_mutex_init sur le mutex
global.
VALEUR RENVOYÉE
pthread_atfork retourne 0 en cas de succès et un code d’erreur non nul
en cas d’erreur.
ERREURS
ENOMEM pas assez de mémoire disponible pour enregistrer les
gestionnaires.
AUTEUR
Xavier Leroy <Xavier.Leroy@inria.fr>
VOIR AUSSI
fork(2), pthread_mutex_lock(3), pthread_mutex_unlock(3).
TRADUCTION
Thierry Vignaud <tvignaud@mandrakesoft.com>, 2000
Christophe Blaess, 2003.