Bonjour, j'ai un petit soucis lors de l'éxécution du programme suivant :
Un processus lance en tâche de fond une recherche avec affichage des fichiers « *.txt » présents à partir du répertoire courant. Aussitôt et en parallèle, il travaille 5 secondes (simulé à l’aide de sleep). À l’issue de ce travail, il attend (éventuellement) la fin de la tâche qu’il a lancée (on ne connait pas le temps de l’exécution de cette tâche).
Enfin, il vérifie la « qualité » de l’exécution de la tâche en analysant puis en affichant le compte-rendu complet de son exécution. Un message final achève son travail.
Voici le code associé:
Code :
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- int main(void)
- {
- int n, ret;
- n= fork();
- if ( n == -1 )
- {
- fprintf(stderr,"Probleme execution fork\n" );
- exit(1);
- }
- if ( n == 0 )
- {
- ret= execlp("find",".","-name","*.txt","-print",NULL);
- exit(2);
- }
- else
- {
- sleep(5);
- ret = wait(&n);
- if ( WIFEXITED(n) )
- printf("fils %d mort par exit %d\n",ret,WEXITSTATUS(n));
- else
- printf("fils %d mort par signal %d\n",ret,WTERMSIG(n));
- printf("fin\n" );
- }
- exit(0);
- }
|
Seulement, lors de l'execution, voici ce qui est affiché :
Code :
- ./fichier1.txt
- ./sous dossier/fichier2.txt
- fils 11112 mort par exit 0
- fin
|
Le code de retour de l'exit est 0, alors qu'il devrait être 2.
Comment expliquer cela ?
Message édité par Astroya le 05-05-2013 à 17:46:28