Bonjour,

je rencontre un problème lors de la vérification du code de retour d'une exécution.

J'ai dans une fonction le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
if ((pid = fork( )) == 0)
{	
           ..
	   execv("/bin/sh",argv);
           exit(127);
}	  
else 
{	
          while (waitpid(pid, &retour, 0) < 0) //j'attends la fin du fils
          if (retour == 127)
	     	{
	     		printf("Erreur lors de l'execution du programme\n");
	     		return (-1);
	     	}
	     	else
	     	{
	 		return (retour); 
	 	}
}
Ensuite lorsque je désire vérifier ce code de retour, j'utilise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
code_retour_exec = appel_a_ma_fonction();
 
if(WIFEXITED(code_retour_exec))//le programme s'est termine normalement
	{
		code = 0;
	}
else if(WIFSIGNALED(code_retour_exec)) //le programme s'est termine a cause d'un signal
	{
		code = 1;
	}
else if(WIFSTOPPED(code_retour_exec))//le programme s'est arrete a cause d'un signal
	{
		code = 2;
	}
Le problème que je rencontre c'est qu'il tombe toujours dans le dernier cas (code =2).
Pourtant, dans mon exec de ma fonction, j'ai essayé d'exécuter un simple programme "Hello World!" en mettant à la fin exit(0)...et même ça ça arrive dans le dernier cas.

Je n'arrive pas à comprendre....
Merci pour l'aide

EDIT : c.f. poste ci-dessous