Beruflich Dokumente
Kultur Dokumente
Tp 2 : waitpid()
Quelle sont les résultats attendu pour l’execution de Waitpid() ;
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void) {
int pid1 = fork();
int status ;
if (pid1< 0) {
printf("Error ");
return 1;
}
if (pid1 == 0) {
sleep(3);
printf("Le processus (%d) a fini sont exécution \n",getpid());
return 0;
}
int pid2 = fork();
if (pid2< 0) {
printf("Error ");
return 2;
}
if (pid2 == 0) {
sleep(1);
printf("Le processus (%d) avec un temps min a fini sont exécution
\n",getpid());
return 0;
}
2- waitpid(pid1,NULL,WIFCONTINUED(status)) et waitpid(pid2,NULL,WIFICONTINUED(status))
Faculté des Mathématiques et de l’Informatique 3ème année Licence ISIL
Département d’Informatique Module : Système d’exploitation II
Processus : exec
Exercice 2 Un exemple avec execv & execl, executer le programme suivent.
Expliquer l’affichage de ce programme
// programme forkExec.c
#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
if (fork()==0) { // premier fils
char* args[]={"ls","-l", NULL};
execv("/bin/ls",args);
printf("echec de execv de ls \n");
exit(1);
} else if (fork()==0) { // second fils
execl("/bin/pwd","pwd",NULL); printf("echec de execl de pwd
\n"); exit(1);
} else { int pid, status;
pid=wait(&status);
printf("fin du fils %d avec %d\n", pid,
WEXITSTATUS(status)); pid=wait(&status);
printf("fin du fils %d axec %d\n", pid,
WEXITSTATUS(status));
}
return 0;
}
1- Que ce passe-t-il si l'appel système `execve()` dans le processus fils de `forkExecve.c` réussit ?
2- Comment le programme forkExecve.c récupèret-il le code de sortie du proceessus fils ( fils.c) ?
Devoir :
1- Donnez un code qui crée l’arbre de processus suivant :
- Après avoir créé ses éventuels fils, chaque processus affiche à l’écran son nom et son
pid puis se termine.
2 – Complétez le code pour que chaque père attende la fin de ses fils avant de se terminer.
3 – Complétez le code pour que les processus feuilles F4, F5, F6 et F7 se transforment respectivement en :
date, ls, ps et cat fich.txt.
La transformation de chaque processus feuille est lancée juste après l’affichage de son nom et son pid.
4 – Quels sont les avantages et les inconvénients d'utiliser execlp() par rapport à d'autres fonctions
d'exécution de commandes comme execvp() ?
5– Comment pourriez-vous implémenter une communication entre les processus feuilles et le processus
parent pour transmettre des informations ou des résultats ?
6 – Quelles sont les implications en termes de sécurité lors de l'exécution de commandes système
directement à partir d'un programme en C ?