C Programmation

Fork System Call en C

Fork System Call en C
l'appel système fork() est utilisé pour créer des processus enfants dans un programme C. fork() est utilisé lorsqu'un traitement parallèle est requis dans votre application. La fonction système fork() est définie dans les en-têtes sys/types.h et unistd.h. Dans un programme où vous utilisez fork, vous devez également utiliser l'appel système wait(). L'appel système wait() est utilisé pour attendre dans le processus parent que le processus enfant se termine. Pour terminer un processus enfant, l'appel système exit() est utilisé dans le processus enfant. La fonction wait() est définie dans l'en-tête sys/attendre.h et la fonction exit() est définie dans l'en-tête stdlib.h.

Fig 1 : Workflow de base de fork()

Dans cet article, je vais vous montrer comment utiliser l'appel système fork() pour créer des processus enfants en C. Alors, commençons.

fork() Syntaxe et valeur de retour :

La syntaxe de la fonction système fork() est la suivante :

pid_t fork(void);

La fonction système fork() n'accepte aucun argument. Il renvoie un entier du type pid_t.

En cas de succès, fork() renvoie le PID du processus fils supérieur à 0. Dans le processus enfant, la valeur de retour est 0. Si fork() échoue, il renvoie -1.

Exemple simple de fork() :

Un exemple simple de fork() est donné ci-dessous :

#inclure
#inclure
#inclure
#inclure
#inclure
 
int main(void)
pid_t pid = fourche();
 
if(pid == 0)
printf("Enfant => PPID : %d PID : %d\n", getppid(), getpid());
exit(EXIT_SUCCESS);

else if(pid > 0)
printf("Parent => PID : %d\n", getpid());
printf("En attente de la fin du processus enfant.\n");
attendre(NULL);
printf("Processus enfant terminé.\n");

autre
printf("Impossible de créer un processus enfant.\n");

 
renvoie EXIT_SUCCESS ;

Ici, j'ai utilisé fork() pour créer un processus enfant à partir du processus principal/parent. Ensuite, j'ai imprimé le PID (Process ID) et le PPID (Parent Process ID) du processus enfant et parent. Sur le processus parent wait(NULL) est utilisé pour attendre la fin du processus enfant. Sur le processus enfant, exit() est utilisé pour terminer le processus enfant. Comme vous pouvez le voir, le PID du processus parent est le PPID du processus enfant. Ainsi, le processus enfant 24738 appartient au processus parent 24731.

Vous pouvez également utiliser des fonctions pour rendre votre programme plus modulaire. Ici, j'ai utilisé processusTâche() et parentTâche() fonctions pour les processus fils et parents respectivement. Voici comment fork() est réellement utilisé.

#inclure
#inclure
#inclure
#inclure
#inclure
 
void childTask()
printf("Bonjour tout le monde\n");

 
void parentTask()
printf("Tâche principale.\n");

 
int main(void)
pid_t pid = fourche();
 
if(pid == 0)
enfantTâche();
exit(EXIT_SUCCESS);

else if(pid > 0)
attendre(NULL);
parentTask();

autre
printf("Impossible de créer un processus enfant.");

 
renvoie EXIT_SUCCESS ;

La sortie du programme ci-dessus :

Exécution de plusieurs processus enfants à l'aide de fork() et de Loop :

Vous pouvez également utiliser loop pour créer autant de processus enfants que nécessaire. Dans l'exemple ci-dessous, j'ai créé 5 processus enfants en utilisant la boucle for. J'ai également imprimé le PID et le PPID des processus enfants.

#inclure
#inclure
#inclure
#inclure
#inclure
 
int main(void)
for(int i = 1; je <= 5; i++)
pid_t pid = fourche();
 
if(pid == 0)
printf("Processus enfant => PPID=%d, PID=%d\n", getppid(), getpid());
sortie(0);

autre
printf("Processus parent => PID=%d\n", getpid());
printf("En attente de la fin des processus enfants… \n");
attendre(NULL);
printf("processus enfant terminé.\n");


 
renvoie EXIT_SUCCESS ;

Comme vous pouvez le voir, l'ID du processus parent est le même dans tous les processus enfants. Donc, ils appartiennent tous au même parent. Ils s'exécutent également de manière linéaire. L'un après l'autre. Le contrôle des processus enfants est une tâche sophistiquée. Si vous en apprenez plus sur la programmation système Linux et son fonctionnement, vous pourrez contrôler le flux de ces processus comme bon vous semble.

Exemple réel :

Différents calculs mathématiques complexes tels que la génération de hachage md5, sha256, etc. nécessitent beaucoup de puissance de traitement. Au lieu de calculer des choses comme ça dans le même processus que le programme principal, vous pouvez simplement calculer le hachage sur un processus enfant et renvoyer le hachage au processus principal.

Dans l'exemple suivant, j'ai généré un code PIN à 4 chiffres dans un processus enfant et l'ai envoyé au processus parent, le programme principal. Ensuite, j'ai imprimé le code PIN à partir de là.

#inclure
#inclure
#inclure
#inclure
#inclure
 
int getPIN()
// utilise PPID et PID comme germe
srand(getpid() + getppid());
int secret = 1000 + rand() % 9000;
retour secret;

 
int main(void)
int fd[2];
tuyau (fd);
pid_t pid = fourche();
 
si(pid > 0)
fermer(0) ;
fermer(fd[1]);
dup(fd[0]);
 
int secretNumber;
size_t readBytes = read(fd[0], &secretNumber, sizeof(secretNumber));
 
printf("En attente du code PIN… \n");
attendre(NULL);
printf("Octets lus : %ld\n", readBytes);
printf("PIN : %d\n", secretNumber);

else if(pid == 0)
fermer (1) ;
fermer(fd[0]);
dup(fd[1]);
 
int secret = getPIN();
write(fd[1], &secret, sizeof(secret));
exit(EXIT_SUCCESS);

 
renvoie EXIT_SUCCESS ;

Comme vous pouvez le voir, chaque fois que je lance le programme, je reçois un code PIN à 4 chiffres différent.

Donc, c'est essentiellement comment vous utilisez l'appel système fork () sous Linux. Merci d'avoir lu cet article.

WinMouse vous permet de personnaliser et d'améliorer le mouvement du pointeur de la souris sur un PC Windows
Si vous souhaitez améliorer les fonctions par défaut de votre pointeur de souris, utilisez un logiciel gratuit WinMouse. Il ajoute plus de fonctionnal...
Le bouton de clic gauche de la souris ne fonctionne pas sous Windows 10
Si vous utilisez une souris dédiée avec votre ordinateur portable ou de bureau mais que le le clic gauche de la souris ne fonctionne pas sur Windows 1...
Le curseur saute ou se déplace de manière aléatoire lors de la saisie dans Windows 10
Si vous constatez que le curseur de votre souris saute ou se déplace tout seul, automatiquement, au hasard lors de la saisie sur un ordinateur portabl...