Provided by: manpages-fr-dev_2.45.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 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(3), 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éper‐
            toire  (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 condi‐
            tion,   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 descrip‐
            tion 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  signi‐
            fie que les deux descripteurs partagent leurs attributs (mq_flags).
        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.
 

EXEMPLE

        Voir pipe(2) et wait(2).
 

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.
        clone(2), execve(2), setrlimit(2), unshare(2), vfork(2), wait(2), capa     
        bilities(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> ».