Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1383 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [C/Unix]Utilisation du wait

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/Unix]Utilisation du wait

n°1336907
Astroya
Posté le 02-05-2013 à 16:37:55  profilanswer
 

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 :
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/types.h>
  5. #include <sys/wait.h>
  6. int main(void)
  7. {
  8.     int n, ret;
  9.     n= fork();
  10.     if ( n == -1 )
  11.         {
  12.             fprintf(stderr,"Probleme execution fork\n" );
  13.             exit(1);
  14.         }
  15.     if ( n == 0 )
  16.         {
  17.             ret= execlp("find",".","-name","*.txt","-print",NULL);
  18.             exit(2);
  19.         }
  20.     else
  21.         {
  22.             sleep(5);
  23.             ret = wait(&n);
  24.             if ( WIFEXITED(n) )
  25.               printf("fils %d mort par exit %d\n",ret,WEXITSTATUS(n));
  26.             else
  27.               printf("fils %d mort par signal %d\n",ret,WTERMSIG(n));
  28.             printf("fin\n" );
  29.         }
  30.     exit(0);
  31. }


 
Seulement, lors de l'execution, voici ce qui est affiché :
 

Code :
  1. ./fichier1.txt
  2. ./sous dossier/fichier2.txt
  3. fils 11112 mort par exit 0
  4. 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
mood
Publicité
Posté le 02-05-2013 à 16:37:55  profilanswer
 

n°1337168
Profil sup​primé
Posté le 05-05-2013 à 17:42:55  answer
 

Bonjour, tu as écrit en dur "exit(0)" pourquoi le code de retour serait 2 ?

n°1337169
Astroya
Posté le 05-05-2013 à 17:45:48  profilanswer
 


Comment ça ?
 

Code :
  1. if ( n == 0 )
  2.         {
  3.             ret= execlp("find",".","-name","core","-print",NULL);
  4.             exit(2);
  5.         }

n°1337170
Profil sup​primé
Posté le 05-05-2013 à 17:55:28  answer
 

Selon le code de ton if tu ne pourait pas avoir à la fois la ligne d'info find et le message "mort du fils" donc il doit y avoir une confusion entre le code de retour de ton processus copier et le processus appellé. j'y connais rien en fork, d'ailleur pourquoi en faire un ?

n°1339370
grao
The visitor
Posté le 12-06-2013 à 22:32:27  profilanswer
 

En regardant vite fait je dirais que ton execlp se termine normalement donc ret= exit(0) et ton exit(2); est pas exécuté.
Ajoute un printf entre les 2 pour voir.
Il faudrait regarder la doc de execlp().
edit: je me demande si c'est pas ton  ret = wait(&n); qui fout le bronx


Message édité par grao le 12-06-2013 à 23:03:26

---------------
Recherche affiche de GITS Arise 3 et 4, faire offre.
n°1339371
Astroya
Posté le 12-06-2013 à 22:36:05  profilanswer
 

Ouais j'ai fini par le voir, mais merci beaucoup pour la réponse ;)

n°1339372
grao
The visitor
Posté le 12-06-2013 à 23:05:47  profilanswer
 

C'était quoi du coup ? :D


---------------
Recherche affiche de GITS Arise 3 et 4, faire offre.
n°1339376
Astroya
Posté le 13-06-2013 à 00:46:01  profilanswer
 

grao a écrit :

C'était quoi du coup ? :D


Recouvrement du processus par le exec qui exit avec un code 0 :jap:


Message édité par Astroya le 13-06-2013 à 00:46:10

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [C/Unix]Utilisation du wait

 

Sujets relatifs
[UNIX] Pourquoi créer un utilisateur par programmescript unix répertoires et sous-répertoires
[CygWin et PERL] C:\Cygwin\bin\sh.exe: *** fatal error[saned] plante après 1 utilisation
Utilisation des polices de caractères dans Write OooNginx, C'est bien , quand ca Marche ! (php5-fpm problème)
Administration Serveur Unix depuis WindowsC'est quoi cette histoire de cpu throttling ?
Linux sur ARM et SingleBoard Computers - Linaro, DevBoard, S.O.C 
Plus de sujets relatifs à : [C/Unix]Utilisation du wait


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR