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'ordre LIFO (Last In First Out : dans l'ordre
inverse de l'enregistrement) juste avant
fork(2),
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 mutexes dans leur état
de bloquage courant, mais seulement le thread courant : les autres threads ne
s'exécutent pas dans le processus fils. Les mutexes ne sont pas utilisables
après le
fork(2)
et doivent être initialisés avec
pthread_mutex_init(3)
dans le processus fils. C'est une limitation de l'implémentation actuelle
et peut être ou ne pas être présente dans les prochaines versions.