Provided by: manpages-fr-dev_2.64.1-1_all bug

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

VALEUR RENVOYÉE

       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.

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.

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)

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