Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
fork - Creer un processus fils
SYNOPSIS
#include <unistd.h>
pid_t fork(void);
DESCRIPTION
fork() cree 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`ere ou parent, avec les
exceptions suivantes :
* Le fils a son propre identifiant de processus unique, et ce PID ne
correspond a 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 pere.
* Le fils n'herite pas des verrouillages memoire du pere (mlock(2),
mlockall(2)).
* Les utilisations de ressources (getrusage(2)) et les compteurs de
temps CPU (times(2)) sont remis a zero dans le fils.
* L'ensemble de signaux en attente dans le fils est initialement vide
(sigpending(2)).
* Le fils n'herite pas des operations sur les semaphores de son pere
(semop(2)).
* Le fils n'herite pas des verrous d'enregistrements de son pere
(fcntl(2)).
* Le fils n'herite pas des temporisations de son pere (setitimer(2),
alarm(2), timer_create(2)).
* Le fils n'herite pas des operations d'E/S asynchrones en cours de
son pere (aio_read(3), aio_write(3)) et n'herite d'aucun contexte
d'E/S asynchrone de son pere (consultez io_setup(2)).
Les attributs du processus listes ci-dessus sont tous specifies dans
POSIX.1-2001. Les processus parent et fils different egalement par les
proprietes specifiques Linux suivantes :
* Le fils n'herite pas des notifications de modification de repertoire
(dnotify) de son pere (voir la description de F_NOTIFY dans
fcntl(2)).
* Le drapeau PR_SET_PDEATHSIG de prctl(2) est reinitialise, de maniere
a ce que le fils ne recoive pas de signal lorsque son pere se
termine.
* Les projections en memoire qui ont ete marquees avec l'attribut
MADV_DONTFORK de madvise(2) ne sont pas herites lors d'un fork().
* Le signal de terminaison du fils est toujours SIGCHLD (consultez
clone(2)).
Notez egalement les points suivants :
* Le processus fils est cree avec un unique thread -- celui qui a
appele fork(). L'espace d'adressage virtuel complet du parent est
copie dans le fils, y compris l'etat des mutex, variables de
condition, et autres objets de pthreads ; l'utilisation de
pthread_atfork(3) peut etre utile pour traiter les problemes que
cela peut occasionner.
* Le fils herite de copies des descripteurs de fichier ouverts du
pere. Chaque descripteur de fichier du fils renvoie a la meme
description de fichier ouvert (consultez open(2)) que le descripteur
de fichier correspondant dans le processus parent. Cela signifie que
les deux descripteurs partagent les attributs d'etat du fichier, le
decalage, et les attributs d'E/S lies aux signaux (voir la
description de F_SETOWN et F_SETSIG dans fcntl(2)).
* Le fils herite de copies des descripteurs files de messages ouvertes
dans le pere (consultez mq_overview(7)). Chaque descripteur dans le
fils renvoie a la meme description de file de messages ouverte que
le descripteur correspondant dans le pere. Cela signifie que les
deux descripteurs partagent leurs attributs (mq_flags).
* Le fils herite d'une copie de l'ensemble des flux de repertoire
ouverts par le parent (consultez opendir(3)). POSIX.1-2001 indique
que les flux de repertoire correspondant dans le parent ou l'enfant
peuvent partager le positionnement du flux de repertoire ; sous
Linux/glibc, ce n'est pas le cas.
VALEUR RENVOY'EE
En cas de succes, le PID du fils est renvoye au parent, et 0 est
renvoye au fils. En cas d'echec -1 est renvoye au parent, aucun
processus fils n'est cree, et errno contient le code d'erreur.
ERREURS
EAGAIN fork() ne peut pas allouer assez de memoire pour copier la table
des pages du pere et allouer une structure de tache pour le
fils.
EAGAIN Il n'a pas ete possible de creer un nouveau processus car la
limite ressource RLIMIT_NPROC de l'appelant a ete rencontree.
Pour franchir cette limite, le processus doit avoir au moins
l'une des deux capacites CAP_SYS_ADMIN ou CAP_SYS_RESOURCE.
ENOMEM fork() a echoue car le noyau n'a plus assez de memoire.
CONFORMIT'E
SVr4, BSD 4.3, POSIX.1-2001.
NOTES
Sous Linux, fork() est implemente en utilisant une methode de copie a
l'ecriture. Ceci consiste a ne faire la veritable duplication d'une
page memoire que lorsqu'un processus en modifie une instance. Tant
qu'aucun des deux processus n'ecrit dans une page donnee, celle-ci
n'est pas vraiment dupliquee. Ainsi les seules penalisations induites
par fork sont le temps et la memoire necessaires a la copie de la table
des pages du parent ainsi que la creation d'une structure de tache pour
le fils.
Depuis la version 2.3.3, plutot que d'invoquer l'appel systeme fork()
du noyau, l'enveloppe fork() de la glibc qui est fournie comme faisant
partie de l'implementation de threading NPTL invoque clone(2) avec des
attributs qui fournissent le meme effet que l'appel systeme
traditionnel. L'enveloppe de la glibc invoque tous les gestionnaires de
bifurcation (Ndt : fork) etablis avec pthread_atfork(3).
EXEMPLE
Consultez pipe(2) et wait(2).
VOIR AUSSI
clone(2), execve(2), setrlimit(2), unshare(2), vfork(2), wait(2),
daemon(3), capabilities(7), credentials(7)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.