Vous êtes sur la page 1sur 2

Année Universitaire : 2019/2020

Matière : Système d'exploitation II


Niveau : LCE1
Institut Supérieur d'Informatique de Mahdia TD 1 : fork() ()

Exercice 1 :
Combien de lignes « hello ! » imprime chacun des programmes suivants ? Dessiner l’arbre généalogique
des processus engendrés.

Exemple1 Exemple2 Exemple3

Corrigé

Exemple1 Exemple2 Exemple3

P1 P1
Hello P1 Hello
Hello Hello
Hello Hello Hello
P2 P4 P2 P3
P2
Hello
P3
P3

Exercice 2 :
Ecrire un programme qui crée 10 processus fils. Chacun d'entre eux devra afficher dix fois d'affilé son
numéro d'ordre entre 0 et 9.
Corrigé :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main() {
int i, j;
/* boucle pour creer les 10 processus fils */
for (i=0; i < 3; i++) {

1
Puisque P1 est le père alors switch (fork()) {
fork() = 1 donc il va créer P2 case -1: fprintf(stderr, "Erreur dans %d\n", getpid());
avec fork() et aussi il va créer
P3 avec fork() perror("fork");
exit(1);
case 0: /* On est dans un fils */
for (j = 0; j < 3; j++) {
printf("%d\n",i);
}
exit(0);//ou bien i=3;
default : ;
}
}
//sleep(0);
for (i=0; i < 3; i++) {
wait(NULL);//will only wait until the child process is completed. But, wait(&status) will return the process id of the child
process that is terminated.
}
/* Ne pas oublier de sortir sinon on cree fact(10) processus */
exit(0);
}

Exercice 3 :
1. Combien de processus engendre l’évaluation de la commande C :
fork() && ( fork() || fork() ) ; 4 processus
2. Dessiner l’arbre généalogique des processus engendrés par cette ligne.
Corrigé :

P1

P2 P3

P4

Puisque P3 est le fils de P1 alors la valeur de fork()=0


donc 0||fork(). Pour cela P3 va créer un autre processus P4
Fork()&&(fork()||fork())

Vous aimerez peut-être aussi