Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       fork - Créer un processus fils

SYNOPSIS

       #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(2),
          timer_create(2)).

       *  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)) et n'hérite d'aucun contexte d'E/S asynchrone de  son  père
          (consultez io_setup(2)).

       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épertoire (dnotify) de son
          père (voir la description de F_NOTIFY dans fcntl(2)).

       *  Le drapeau PR_SET_PDEATHSIG de prctl(2) 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().

       *  Le signal de terminaison du fils est toujours SIGCHLD (consultez clone(2)).

       Notez également les points suivants :

       *  Le processus fils est créé avec un unique thread — celui qui a appelé fork().  L'espace
          d'adressage  virtuel  complet  du  parent  est copié dans le fils, y compris l'état des
          mutex, variables  de  condition,  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  fichier  ouverts  du  père. Chaque
          descripteur de fichier du  fils  renvoie  à  la  même  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'état  du
          fichier,  le  décalage, et les attributs d'E/S liés aux signaux (voir la description 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
          (consultez  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 signifie que les deux descripteurs partagent leurs attributs (mq_flags).

       *  Le  fils  hérite d'une copie de l'ensemble des flux de répertoire ouverts par le parent
          (consultez opendir(3)). POSIX.1-2001 indique que les flux de  répertoire  correspondant
          dans  le  parent ou l'enfant peuvent partager le positionnement du flux de répertoire ;
          sous Linux/glibc, ce n'est pas le cas.

VALEUR RENVOYÉE

       En cas de succès, le PID du fils est renvoyé au parent, et 0 est renvoyé au fils.  En  cas
       d'échec  -1  est  renvoyé au 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.

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.

       Depuis  la  version  2.3.3,  plutôt  que  d'invoquer  l'appel  système  fork()  du  noyau,
       l'enveloppe fork() de la glibc qui est fournie comme faisant partie de l'implémentation de
       threading  NPTL  invoque  clone(2)  avec  des  attributs qui fournissent le même effet que
       l'appel système traditionnel. L'enveloppe de la glibc invoque tous  les  gestionnaires  de
       bifurcation (Ndt : fork) établis 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.32 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <URL:http://po4a.alioth.debian.org/>  par  l'équipe  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'équipe francophone de
       traduction de Debian (2006-2009).

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