PTHREAD_ATFORK(3)

NOM
pthread_atfork — Enregistrer 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 enfant juste avant la fin de l'appel fork(2).

Un ou plusieurs des trois gestionnaires prepare, parent et child peuvent être affectés comme 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 (dernier ajouté avec pthread_atfork, premier appelé avant fork), alors que les gestionnaires parent et child sont appelés dans l'ordre FIFO (premier ajouté, premier appelé).

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 blocage courant, mais seulement le thread appelant : les autres threads ne s'exécutent pas dans le processus enfant. Les mutex ne sont pas utilisables après le fork() et doivent être initialisés avec pthread_mutex_init dans le processus enfant. C'est une limitation de l'implémentation actuelle et peut être ou non présente dans les prochaines versions.

VALEUR RENVOYÉE

pthread_atfork() renvoie 0 en cas de succès et un code d'erreur différent de zéro 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
La traduction française de cette page de manuel a été créée par Alain Portal <aportal@univ-montp2.fr>, Christophe Blaess <https://www.blaess.fr/christophe/>, David Prévot <david@tilapin.org>, Denis Barbier <barbier@debian.org>, Florentin Duneau <fduneau@gmail.com>, François Micaux, Frédéric Hantrais <fhantrais@gmail.com>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Julien Cristau <jcristau@debian.org>, Nicolas François <nicolas.francois@centraliens.net>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Thomas Blein <tblein@tblein.eu>, Thomas Huriaux <thomas.huriaux@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.