Académique Documents
Professionnel Documents
Culture Documents
Exercice 1 :
Combien de lignes « hello ! » imprime chacun des programmes suivants ? Dessiner l’arbre généalogique
des processus engendrés.
Corrigé
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