Vous êtes sur la page 1sur 3

Exercice 1

Pour chaque bout de code suivant, dire combien de fois la ligne "Hello!"
est imprimée, combien de processus sont créés par le programme et
dessiner (dans la partie droite du tableau) l'arborescence des processus
créés. Indication : Si le programme ne crée aucun processus fils, le
nombre de processus créés est 1 qui correspond au processus main. Si le
programme crée 1 processus fils, le nombre de processus créés est 2
(processus main + processus fils) et ainsi de suite.

Prog1:
int main() {
printf ("Hello!\n");
return 0; P
}
Nombre de lignes Hello!: 1
Nombre de processus créés: 1

Prog2:
int main() {
printf ("Hello!\n");
fork();
return 0; P F
}
Nombre de lignes Hello!: 1
Nombre de processus créés: 2

Prog3:
int main() {
fork();
printf ("Hello!\n");
return 0; P F
}
Nombre de lignes Hello!: 2
Nombre de processus créés: 2

Prog4:
int main() {
fork();
fork(); F1 F11
printf ("Hello!\n");
return 0; P
} F2
Nombre de lignes Hello!: 4
Nombre de processus créés: 4
Prog5:
for (i = 1; i <= 2; i++) {
pid = fork(); F1 F11
if (pid != 0)
printf ("Hello!\n"); P
}
F2
Nombre de lignes Hello!: 3
Nombre de processus créés: 4

Prog6:
for (i = 1; i <= 2; i++) {
pid = fork();
if (pid == 0) F1
break; /* Fin de la boucle for */

else P
printf("Hello!\n"); F2
}
Nombre de lignes Hello!: 2
Nombre de processus créés: 3

Exercice 2
Quelles sont les lignes affichées par chacun des 2 programmes C
suivants.

Programme 1:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int i, p;
p = fork();
if (p < 0)
exit(1);
printf ("Hello!\n");
execl("/bin/date", "date",NULL);
return 0;
}
Réponse:
Hello!
Hello!
mardi 26 novembre 2013, hh:mm:ss (UTC+0100)
mardi 26 novembre 2013, hh:mm:ss (UTC+0100)

Programme 2
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int i, p;
p = fork();
if (p < 0)
exit(1);
execl("/bin/date", "date",NULL);
printf ("Hello!\n");
return 0;
}
Réponse:
mardi 26 novembre 2013, hh:mm:ss (UTC+0100)
mardi 26 novembre 2013, hh:mm:ss (UTC+0100)

Indications:
1- La commande Linux date affiche la date et l'heure sous la forme
suivante :
2- On suppose que l'appel système execl() réussit.

Exercice 3
Soit le programme C suivant qui crée 2 processus fils, fils1 et fils2.
fils1 affiche les nombres de 1 à 10, fils2 affiche les nombres de 11 à
20. A l'exécution, les nombres affichés par fils1 et fils2 peuvent être
mélangés. Un exemple d'affichage est : 11 12 13 14 15 16 17 18 19 20 1 2
3 4 5 6 7 8 9 10.

Question: Ajouter une seule instruction au programme pour avoir tout le


temps l'affichage suivant : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
19 20.

int main(void) {
pid_t pid;
int i;
if ((pid = fork()) == -1){
perror("fork");
exit(1);
}
if (pid == 0) { /* fils1 */
for (i = 1; i <= 10; i++)
printf("%d ", i);
exit(0);
}
wait(NULL); /* ou bien waitpid(NULL); */

if ((pid = fork()) == -1) {


perror("fork");
exit(1);
}
if (pid == 0) { /* fils2 */
for (i = 11; i <= 20; i++)
printf("%d ", i);
exit(0);
}
wait(NULL);
wait(NULL);
return 0;
}

Vous aimerez peut-être aussi