Provided by: manpages-fr_1.67.0-1_all bug

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.