FORK |
Fourche |
---|---|
unistd.h |
Syntaxe
pid_t fork(void); |
Retour
Valeur | Description |
---|---|
0 | Cette valeur permet d'indiquer à l'enfant que l'opération à réussis. |
-1 | Cette valeur permet d'indiquer qu'une erreur s'est produite. Dans ce cas, il sera possible d'obtenir des informations supplémentaires en consultant la variable errno. |
supérieur à 0 | Ces valeurs permettent d'indiquer l'identificateur de processus du parent. |
Description
Cette fonction permet de créer un processus fils ou enfant.
Remarques
- Le processus enfant est identiques au processus parent à l'exception des points suivants : il possède son propre identificateur de processus, l'identificateur du parent de l'enfant est identique à l'identificateur du parent, l'enfant n'hérite pas des verrous de mémoire, les ressources de processus et les compteurs d'utilisation de temps du microprocesseur sont remises à 0 pour l'enfant, l'ensemble des signaux de l'enfant est initialement vide, l'enfant n'hérite pas des sémaphore de son parent, l'enfant n'hérite pas des verrouillage d'enregistrement de son parent, l'enfant n'hérite pas de la minuterie de son parent, l'enfant n'hérite pas des opérations d'entrée/sortie du parent, l'enfant n'hérite pas des des avertissements de changement de répertoire, l'enfant ne sait pas que le parent se termine, la cartographie de la mémoire n'est pas hérité, les permissions d'entrée/sorties ne sont pas hérité.
- Les codes d'erreurs retournés par la variable «errno» correspondent généralement à ceci :
Constante | Description |
---|---|
EAGAIN | Cette constante permet d'indiquer que la ressource est temporairement indisponible. Sur certaines distribution, cette constante a parfois la même valeur que EWOULDBLOCK. |
ENOMEM | Cette constante permet d'indiquer qu'il n'y a pas d'espace de disponible. |
ENOSYS | Cette constante permet d'indiquer que la fonction n'a pas été intégré. |
Exemple
Voici exemple montrant comment se comporte cette fonction avec les variables locales et globales :
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
-
- int var_global;
-
- int main(void) {
- int var_local = 0;
- switch(fork()) {
- case -1: // Echec
- printf("Echec de l'appel de la fonction fork() !");
- return 1;
- case 0: // Processus enfant
- var_local++;
- var_global++;
- puts("PROCESSUS ENFANT:");
- printf("Variable local = %i et global = %i\n\n", var_local, var_global);
- break;
- default: // Processus parent
- var_local = 5000;
- var_global = 10000;
- puts("PROCESSUS PARENT: ");
- printf("Variable local = %i et global = %i\n\n", var_local, var_global);
- break;
- }
- return 0;
- }
on obtiendra le résultat suivant :
PROCESSUS PARENT:Variable local = 5000 et global = 10000
PROCESSUS ENFANT:
Variable local = 1 et global = 1
Voir également
Articles - Fork bomb
Langage de programmation - C pour Linux - Référence de procédures et fonctions - vfork
Langage de programmation - Perl - Référence de procédures et fonctions - fork
Dernière mise à jour : Samedi, le 27 juin 2015