Provided by: manpages-fr-dev_3.57d1p1-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 processeur
          (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.

       *  La valeur de temporisation relâchée par défaut est définie à la valeur de temporisation
          relâchée actuelle de son père. Veuillez consulter la description  de  PR_SET_TIMERSLACK
          dans prctl(2).

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

       *  Les bits de permission d'accès au port indiqués par ioperm(2) ne sont pas  hérités  par
          le fils ; le fils doit activer avec ioperm(2) les bits dont il a besoin.

       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.

       ENOSYS fork()   n'est pas supporté sur cette plate-forme (par exemple sur du matériel sans
              unité de gestion 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 (un appel à fork() est équivalent à un appel à clone(2)  avec
       flags  valant  exactement SIGCHLD). L'enveloppe de la glibc invoque tous les gestionnaires
       de bifurcation (« fork ») établis avec pthread_atfork(3).

EXEMPLE

       Consultez pipe(2) et wait(2).

VOIR AUSSI

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

COLOPHON

       Cette  page  fait partie de la publication 3.57 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

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <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> ».