Provided by:
manpages-fr-dev_2.45.1-1_all 
NOM
fork - Créer un processus fils
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
DESCRIPTION
fork() crée un nouveau processus en copiant le processus appelant. Le
nouveau processus, qu’on appelle fils (« child\ »), est une copie
exacte du processus appelant, qu’on appelle père ou parent, avec les
exceptions suivantes :
* Le fils a son propre identifiant de processus unique, et ce PID ne
correspond à l’identifiant d’aucun groupe de processus existant
(setpgid(2)).
* L’identifiant de processus parent (PPID) du fils est l’identifiant
de processus (PID) du père.
* Le fils n’hérite pas des verrouillages mémoire du père (mlock(2),
mlockall(2)).
* Les utilisations de ressources (getrusage(2)) et les compteurs de
temps CPU (times(2)) sont remis à zéro dans le fils.
* L’ensemble de signaux en attente dans le fils est initialement vide
(sigpending(2)).
* Le fils n’hérite pas des opérations sur les sémaphores de son père
(semop(2)).
* Le fils n’hérite pas des verrous d’enregistrements de son père
(fcntl(2)).
* Le fils n’hérite pas des temporisations de son père (setitimer(2),
alarm(3), timer_create(3)).
* Le fils n’hérite pas des opérations d’E/S asynchrones en cours de
son père (aio_read(3), aio_write(3)).
Les attributs du processus listés ci‐dessus sont tous spécifiés dans
POSIX.1-2001. Les processus parent et fils diffèrent également par les
propriétés spécifiques Linux suivantes :
* Le fils n’hérite pas des notifications de modification de réper‐
toire (dnotify) de son père (voir la description de F_NOTIFY dans
fcntl(2)).
* Le drapeau PR_SET_PDEATHSIG est réinitialisé, de manière à ce que
le fils ne reçoive pas de signal lorsque son père se termine.
* Les projections en mémoire qui ont été marquées avec l’attribut
MADV_DONTFORK de madvise(2) ne sont pas hérités lors d’un fork(2).
* Le signal de terminaison du fils est toujours SIGCHLD (voir
clone(2)).
Notez également les points suivants :
* Le processus fils est créé avec un unique thread — celui qui a
appelé fork(2). L’espace d’adressage virtuel complet du parent est
copié dans le fils, y compris l’état des mutex, variables de condi‐
tion, et autres objets de pthreads ; l’utilisation de
pthread_atfork(3) peut être utile pour traiter les problèmes que
cela peut occasionner.
* Le fils hérite de copies des descripteurs de fichiers ouverts du
père. Chaque descripteur de fichier du fils renvoie à la même
description de fichier ouvert (voir open(2)) que le descripteur de
fichier correspondant dans le processus parent. Cela signifie que
les deux descripteurs partagent les attributs d’état du fichier, le
décalage, et les attributs d’E/S liés aux signaux (voir la descrip‐
tion de F_SETOWN et F_SETSIG dans fcntl(2)).
* Le fils hérite de copies des descripteurs files de messages
ouvertes dans le père (voir mq_overview(7)). Chaque descripteur
dans le fils renvoie à la même description de file de messages
ouverte que le descripteur correspondant dans le père. Cela signi‐
fie que les deux descripteurs partagent leurs attributs (mq_flags).
En cas de succès, le PID du fils est renvoyé au processus parent, et 0
est renvoyé au processus fils. En cas d’échec -1 est renvoyé dans le
contexte du parent, aucun processus fils n’est créé, et errno contient
le code d’erreur.
ERREURS
EAGAIN fork() ne peut pas allouer assez de mémoire pour copier la table
des pages du père et allouer une structure de tâche pour le
fils.
EAGAIN Il n’a pas été possible de créer un nouveau processus car la
limite ressource RLIMIT_NPROC de l’appelant a été rencontrée.
Pour franchir cette limite, le processus doit avoir au moins
l’une des deux capacités CAP_SYS_ADMIN ou CAP_SYS_RESOURCE.
ENOMEM fork() a échoué car le noyau n’a plus assez de mémoire.
CONFORMIT
SVr4, BSD 4.3, POSIX.1-2001.
EXEMPLE
Voir pipe(2) et wait(2).
NOTES
Sous Linux, fork() est implémenté en utilisant une méthode de copie à
l’écriture. Ceci consiste à ne faire la véritable duplication d’une
page mémoire que lorsqu’un processus en modifie une instance. Tant
qu’aucun des deux processus n’écrit dans une page donnée, celle‐ci
n’est pas vraiment dupliquée. Ainsi les seules pénalisations induites
par fork sont le temps et la mémoire nécessaires à la copie de la table
des pages du parent ainsi que la création d’une structure de tâche pour
le fils.
clone(2), execve(2), setrlimit(2), unshare(2), vfork(2), wait(2), capa
bilities(7)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».