Provided by: manpages-fr-dev_3.17.1-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  pre  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(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é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  (voir
          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 (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
          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 (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 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 (voir 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

       Voir pipe(2) et wait(2).

VOIR AUSSI

       clone(2),  execve(2),  setrlimit(2),  unshare(2),  vfork(2),   wait(2),
       capabilities(7), credentials(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.17 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

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