Vous êtes sur la page 1sur 2

UNIVERSITE IBNOU ZOHR, Année universitaire : 2018-2019

FACULTE DES SCIENCES


Département Informatique
Agadir

OS2 : Programmation système en C sous Unix

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.

Exercice 3 : Ecrivez un programme en langage C qui crée un processus Zombie puis


avec la fonction system exécute la commande ps pour s’assurer que le processus est
bien un zombie.

Exercice 4 : Expliquer ce le comportement de chaque 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

Exercice 8 : Expliquez le comportement du programme de la figure suivante. Donner


l'arbre des processus créés.

#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; }

Vous aimerez peut-être aussi