pthread_atfork(3) Library Functions Manual pthread_atfork(3)

pthread_atfork — Enregistrer des gestionnaires d'appel à fork

Bibliothèque de threads POSIX (libpthread, -lpthread)

#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void),
                   void (*child)(void));

Le fonction pthread_atfork() enregistre les gestionnaires de fork qui doivent être exécutés quand fork(2) est appelé par un des threads d'un processus. Les gestionnaires sont exécutés dans le contexte du thread qui appelle fork(2).

Trois types de gestionnaires peuvent être enregistrés :

  • prepare spécifie un gestionnaire qui est exécuté dans le processus parent avant le début du traitement de fork(2).
  • parent spécifie un gestionnaire qui est exécuté dans le processus parent après l'achèvement du traitement de fork(2).
  • child spécifie un gestionnaire qui est exécuté dans le processus enfant après l'achèvement du traitement de fork(2).

N'importe lequel des trois arguments peut être NULL si aucun gestionnaire n'est nécessaire dans la phase correspondante du traitement de fork(2).

pthread_atfork() renvoie zéro en cas de succès. En cas d'erreur, elle renvoie un numéro d'erreur. pthread_atfork peut être appelée plusieurs fois par un processus pour enregistrer des gestionnaires supplémentaires. Les gestionnaires de chaque phase sont appelés dans un ordre spécifié : les gestionnaires prepare sont appelés en ordre inverse d'enregistrement, les gestionnaires parent et child sont appelés dans l'ordre d'enregistrement.

Impossible d'allouer assez de mémoire pour enregistrer l'entrée de liste de gestionnaires de fork.

POSIX.1-2008.

POSIX.1-2001.

Quand fork(2) est appelé dans processus multithreadé, seul le thread appelant est dupliqué dans le processus enfant. L'objectif originel de pthread_atfork() était de permettre de renvoyer le processus enfant dans un état cohérent. Par exemple, au moment de l'appel de fork(2), d'autres threads peuvent avoir verrouillé des mutex qui sont visibles dans la mémoirede l'espace utilisateur dupliquée dans l'enfant. Ce type de mutex ne devrait jamais être déverrouillé dans la mesure où les threads qui ont placé les verrous ne sont pas dupliqués dans l'enfant. L'intention de pthread_atfork() était de fournir un mécanisme selon lequel l'application (ou une bibliothèque) pouvait assurer que les mutex et autres états de processus et de thread soient restaurés dans un état cohérent. En pratique, cette tâche est en général trop difficile pour être réalisable.

Après qu'un fork(2) dans un processus multithreadé retourne dans l'enfant, l'enfant peut seulement appeler des fonctions sûres du point de vue des signaux asynchrones (consultez signal-safety(7)) jusqu'au moment où il appelle execve(2) pour exécuter un nouveau programme.

POSIX.1 spécifie que pthread_atfork() ne pourra échouer avec l'erreur EINTR.

fork(2), atexit(3), pthreads(7)

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 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.

31 octobre 2023 Pages du manuel de Linux 6.06