Vous êtes sur la page 1sur 5

Filière 3ème ANNÉE Informatique et Réseaux

Tp 3 : Création et implémentation Année


universitaire :
des processus 2022/2023

Objectifs :
Création et communication entre processus

Exercice 1 : Création de processus


Que réalisent les programmes suivants. Combien de processus sont créés ? Indiquez le résultat à
l’écran.
1.1

1.2

1.3 s

1 TP N°3
Exercice 2 : La fonction execl()
3.1 Donnez le code source C d'un programme print.c qui affiche à l'écran la chaîne de caractères qui
lui est passée en paramètre en ligne de commande, par exemple print coucou. Compiler et tester ce
programme.
3. 2 Ecrire un programme prog1 qui crée un processus fils qui exécute print avec l’argument salut. On
utilisera la fonction execl.

1-

#include <stdio.h>

int main(int argc, char *argv[]) {

printf("%s\n", argv[1]);

return 0;
}
2-

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
pid_t pid;

2 TP N°3
pid = fork();

if (pid == -1) {
perror("Erreur lors de la création du processus fils");
return 1;
} else if (pid == 0) {
// Code exécuté par le processus fils

execl("./exe2", "exe2", "salut", NULL);

} else {
// Code exécuté par le processus parent

wait(NULL);
printf("le processus pere attend la terminison de son
fils");
}

return 0;
}

Exercice 3 : La fonction kill()


Ecrire un programme qui crée un processus fils qui affiche à chaque seconde le nombre de secondes
écoulées. Le processus père arrête le processus fils au bout de 10 secondes.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int main() {
pid_t child_pid = fork();
if (child_pid == 0) {
// Processus fils
int seconds = 0;
while (1) {
printf("Secondes écoulées : %d\n", seconds);
sleep(1);
seconds++;
}
} else if (child_pid > 0) {
// Processus père
sleep(10);

3 TP N°3
kill(child_pid, SIGKILL);
} else {
// Erreur lors de la création du processus fils
printf("Erreur lors de la création du processus
fils.\n");
return 1;
}
return 0;
}

Exercice 4 : La fonction wait()


Ecrire un programme qui crée 2 processus, l’un faisant la commande ls -l, l’autre ps -l. Le père devra
attendre la fin de ses deux fils et afficher quel a été le premier processus à terminer.

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
pid_t pid1, pid2;
int status, pid_premier;

// Création du premier processus fils


pid1 = fork();
if (pid1 == 0) {
// Processus fils 1
execl("/bin/ls", "ls", "-l", NULL);

// Création du deuxième processus fils


pid2 = fork();
if (pid2 == 0) {
// Processus fils 2
execl("/bin/ps", "ps", "-l", NULL);

pid_premier = wait(&status);
if (pid_premier == pid1) {

4 TP N°3
printf("Le processus %d (ls -l) a terminé en premier.\n",
pid1);
} else {

printf("Le processus %d (ps -l) a terminé en premier.\n",


pid2);
}
}

5 TP N°3

Vous aimerez peut-être aussi