Linux |
CentOS 4.8 |
|
fork(2) |
fork − Créer un processus fils (child). |
#include <sys/types.h> pid_t fork(void); |
fork crée un processus fils qui diffère du processus parent uniquement par ses valeurs PID et PPID et par le fait que toutes les statistiques d’utilisation des ressources sont remises à zéro. Les verrouillages 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. |
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. |
ENOMEM |
Impossible d’allouer assez de mémoire pour copier la table des pages du père et d’allouer une structure de tâche pour le fils. |
|
EAGAIN |
Impossible de trouver un emplacement vide dans la table des processus. |
pid_t pid; pid = fork (); if (pid > 0) { /* Processus père */ } else if (pid == 0) { /* Processus fils */ } else { /* Traitement d’erreur */ } |
SVr4, SVID, POSIX, X/OPEN, BSD 4.3 |
clone(2), execve(2), vfork(2), wait(2). |
Christophe Blaess, 1997. |
fork(2) |