PTHREAD_ATFORK

Section: C Library Functions (3)
Updated: LinuxThreads
Index Retour au Menu Principal


 

NOM

pthread_atfork - enregistre des gestionnaires à appeler 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 que 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 point correspondant.

pthread_atfork peut être appelée plusieurs fois pour enregistrer plusieurs ensemble de gestionnaires. Lors de l'appel à fork(2), les gestionnaires prepare sont appelés dans l'orde LIFO (Last In First Out: les gestionnaires sont enregistrés dans une pile et sont exécutés du plus récemment installé au premier installé) juste avant fork, alors que les gestionnaires parent et child sont appelés dans l'ordre FIFO (First In First Out: les gestionnaires sont exécutés dans l'ordre de leur enregistrement du plus ancien au plus récent).

Pour comprendre l'objectif de pthread_atfork, rappellons que fork(2) copie toute l'image méméoire du processus, y compris ses mutex dans leur état de bloquage courrant, mais seulement le thread courrant: les autres threads ne s'exécutent pas dans le processus fils. Donc, si un mutex 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é à 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>  

TRADUCTION

Thierry Vignaud <tvignaud@mandrakesoft.com>, 2000

 

VOIR AUSSI

fork(2), pthread_mutex_lock(3), pthread_mutex_unlock(3).



 

Index

NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
AUTEUR
TRADUCTION
VOIR AUSSI


Time: 22:30:04 GMT, December 19, 2004