Académique Documents
Professionnel Documents
Culture Documents
TP/TD n◦1
Processus
Exercice 1 :
Ecrire un programme qui crée un processus fils. Le processus père doit
afficher “je suis le père” en plus de son PID et PPID”. Le fils doit afficher “je suis le
fils en plus de son PID et PPID”. Utilser l’appel système wait. Qui ce qui se passe si
on n’utilise pas wait ?.
Exercice 2 :
Ecrivez un programme en langage C mettant en évidence d’un processus orphelin. On
pourra afficher les numéros de processus et les numéros de processus parent à divers
moments de l’exécution de ce programme.
1 int main() { 2
#include <unistd.h>
int af1, af2, af3;
int main(int argc, char *argv[]){) {
af2= getpid();
int af1, af2, af3; af3 = getppid();
af1 = fork(); af1 = fork();
af2= getpid(); printf("af1=%d---af2=%d---af3=%d\n",af1,af2,af3);
af3 = getppid(); return 0;
printf("af1=%d---af2=%d--- }
. af3=%d\n",af1,af2,af3);
return 0;
}
int main() { 4
int pid,status;
int main() { 3
int x = 3;
int pid,status;
printf("x=%d\n",x);
int x = 3;
pid = fork();
printf("x=%d\n",x);
printf("x=%d\n",x);
pid = fork();
if (pid != 0) {
x = x+1;
x = x+1;
printf("x=%d\n",x);
printf("xp=%d\n",x);
if (pid != 0) {
wait(&status);
wait(&status);
}
}
return 0;
return 0;
}
}
1
Exercice 5 :
Ecrire un programme qui crée deux fils appelés fils 1 et fils 2. Chaque processus doit
afficher son PID et son PPID.
Exercice 6 :
Ecrire un programme qui crée 4 fils en utilisant une boucle for.
Ps : utiliser break pour interrompre la boucle pour que le fils ne crée pas lui-même
plusieurs fils.
Exercice 7 :
Ecrire un programme qui reproduit l'arbre généalogique ci-après. Chaque processus
doit afficher son PID, son PPID, et le fils qu'il engendre
Père
PID, PPID
fils1 Fils2
PID, PPID PID, PPID
fils1-1 fils1-2
PID, PPID PID, PPID
#include <stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include <stdlib.h>
#include<sys/wait.h>
#include <errno.h>
int main(){
pid_t pid_fils;
int status, i;
for(i=0;i<2;i++){
pid_fils=fork();
if(pid_fils==-1){ fprintf(stderr, "fork () impossible, errno=%d\n", errno);
exit(1);
}
if(pid_fils==0){
printf("Fils %d : PID=%ld, PPID=%ld \n",i,(long) getpid(), (long) getppid());
}else{
printf("Pere %d : PID=%ld, PPID=%ld, PID fils=%ld\n",i,(long) getpid(),(long) getppid(),(long)pid_fils);
wait(&status);
}
}
return 0; }