Partenaires

CNRS IN2P3
UPMC
UPD
UPMC


Rechercher

Sur ce site

Sur le Web du CNRS


Accueil du site > Le LPNHE > Pages du personnel > Beau Tristan > Divers > Vielleries > fork, ou comment créer des processus fils en C

fork, ou comment créer des processus fils en C

13 octobre 2005

par Tristan Beau - 18 mai

La fonction fork permet de créer un nouveau processus. Autrement dit, l’appel à fork crée un processus copie conforme du processus appelant.

Utilisation illustrative

Ainsi, vous pouvez essayer :

L’exécution donnera :

Le premier printf est exécuté une fois, il se situait avant le fork. En revanche, après l’appel à fork, le printf est appelé deux fois.

Il faut ensuite savoir que la valeur de retour de fork est :

  • soit 0, auquel cas nous sommes dans le processus fils
  • soit un nombre supérieur à 0, auquel cas nous sommes dans le processus parent, et le nombre correspond au PID du processus fils
  • soit -1 si il a été impossible de créer un nouveau processus (voir man 2 fork pour plus de détail.

Interaction minimale entre processus parent et fils

Pour effectuer des synchronisation entre processus parent et fils, on peut faire en sorte que le processus parent attende la fin du processus fils. On réalise cela ainsi :

Essayez cela, l’exécution est très explicite :

  • on crée un processus fils (avec fork bien entendu)
  • le processus parent attend que le processus fils finisse (avec waitpid, sachant que le PID du processus fils a été donné par la valeur de retour de fork)
  • pour simuler un processus non trivial, on fait attendre 2 secondes le processus fils, qui meurt ensuite (et le précise en sortie standard)
  • le processus fils étant fini, le processus parent reprend et se termine.

Voilà !

Échange de données entre processus parent et fils

Avec l’utilisation de tuyaux (ou pipe en anglais), il est très simple de faire communiquer le processus parent et le processus fils. Ainsi, pour échanger des caractères (ici seulement 1 caractère), on pourra faire :

Facebook