Problème avec wait - C - Programmation
Marsh Posté le 10-10-2011 à 11:23:01
Bon finalement j'ai contourné mon problème en utilisant la fonction waitpid.
J'ai donc remplacé la ligne :
pid=wait(etatpere);
par
pid=waitpid(pid,&etatpere,0);
et ça marche mieux, le père se termine sans problème et le fils a bien fait son boulot.
Par contre si quelqu'un a une explication concernant le problème avec wait() je suis preneur..........
sal1 a écrit : Bonjour à tous, |
Marsh Posté le 10-10-2011 à 16:13:45
Du code qui n'est pas formaté n'est jamais agréable à lire. utilise les balises CPP pour te faire un résultat comme ca :
Code :
|
Marsh Posté le 10-10-2011 à 10:34:03
Bonjour à tous,
j'ai un petit soucis avec la fonction wait() dont voici le code :
fprintf(stderr,"Avant fork()\n" );
pid = fork ();
fprintf(stderr,"pid : %d - Apres fork()\n", pid);
switch (pid)
{
case (pid_t)0 : /* creation du processus fils */
{
fprintf(stderr,"Je suis le fils et je vais lancer mon prog\n" );
etat=execlp("prog",
"prog",
"CUC",
"non",
"annule",
NULL);
/* Echec de l'execution */
fprintf(stderr,"Erreur lors de la tentative d'execution du " );
fprintf(stderr," batch bref_demande_copie \n" );
break;
}
case (pid_t) (-1) : /* creation du fils impossible */
{
fprintf(stderr,"Execution du batch bref_demande_copie " );
fprintf(stderr,"impossible (annulation de la demande de copie " );
fprintf(stderr,"du referentiel CUC non effectuee) \n" );
break;
}
default : /* Le processus pere attend le processus fils */
{
fprintf(stderr,"Je suis le pere et j'attends le processus fils : %d - Attente......\n", pid);
pid=wait(etatpere);
fprintf(stderr,"J'ai fini d'attendre\n" );
if (WIFEXITED (etat))
{
if (WEXITSTATUS(*etatpere) !=0)
{
fprintf (stderr,"Echec de la reinitialisation de la " );
fprintf (stderr,"demande de copie (statut : %d) \n",WEXITSTATUS(*etatpere));
}
}
else
{
if (WIFSIGNALED(*etatpere))
{
fprintf (stderr,"Signal recu lors de la reinitialisation " );
fprintf (stderr,"de la demande de copie : %d \n",WTERMSIG(*etatpere));
}
}
}
}
Le problème c'est que j'ai mon fils qui exécute bien le programme voulu mais le processus père reste en attente indéfiniment
Quelqu'un aurait-il une idée sur ce problème ?
Merci