FORK(2)            Manuel du programmeur Linux            FORK(2)


NOM
       fork, vfork - Créer un processus fils (child).

SYNOPSIS
       #include <unistd.h>

       pid_t fork(void);
       pid_t vfork(void);

DESCRIPTION
       fork  crée un processus fils qui diffère du processus par­
       ent uniquement par ses valeurs PID et PPID. Les  verrouil­
       lages  de  fichiers, et les signaux en attente ne sont pas
       hérités.

       Sous Linux, fork est implementé 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.

       vfork est une primitive BSD différente de fork dans laque­
       lle  le  fils partage physiquement l'espace d'adressage du
       père, ce dernier restant bloqué jusqu'à la terminaison  du
       fils  pour  éviter les conflits d'adressage.  Le fils doit
       dans ce cas se terminer obligatoirement  par  _exit(2)  et
       non pas par exit(3).

       Pour utiliser vfork il faut avoir défini la constante sym­
       bolique __USE_BSD



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 Impossible  d'allouer  assez de mémoire pour copier
              la table des pages du père et d'allouer une  struc­
              ture de tâche pour le fils.

       ENOMEM Pas assez de mémoire pour le noyau.


EXEMPLE
       fork() :
           pid_t   pid;



Linux 1.2.9               9 Octobre 1996                        1





FORK(2)            Manuel du programmeur Linux            FORK(2)


           pid = fork ();

           if (pid > 0) {
                /* Processus père      */
           } else if (pid == 0) {
                /* Processus fils      */
           } else {
                /* Traitement d'erreur */
           }

       vfork() :
           pid_t   pid;

           pid = vfork ();

           if (pid > 0) {
                /* Processus père      */
           } else if (pid == 0) {
                /* Processus fils      */
                _exit (0);
           } else {
                /* Traitement d'erreur */
           }



CONFORMITÉ
       SVr4, SVID, POSIX, X/OPEN, BSD 4.3

VOIR AUSSI
       clone(2), execve(2), wait(2)


TRADUCTION
       Christophe Blaess, 1997.






















Linux 1.2.9               9 Octobre 1996                        2