J'ai eu du mal à comprendre et à appliquer les réponses existantes.
En Réponse d'AraK Si l'application a plus d'un processus enfant en cours d'exécution, il n'est pas possible de savoir quel processus enfant spécifique a produit l'état de sortie obtenu. Selon la page de manuel,
wait() et waitpid()
Le site attendre() L'appel système suspend l'exécution du processus appelant jusqu'à ce que l'un de ses enfants se termine . L'appel wait(&status) est équivalent à :
waitpid(-1, &status, 0);
The **waitpid()** system call suspends execution of the calling process until a **child specified by pid** argument has changed state.
Ainsi, pour obtenir le statut de sortie d'un processus enfant spécifique, nous devons réécrire la réponse comme suit :
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
int number, statval;
int child_pid;
printf("%d: I'm the parent !\n", getpid());
child_pid = fork();
if(child_pid == -1)
{
printf("could not fork! \n");
exit( 1 );
}
else if(child_pid == 0)
{
execl("/bin/ping", "/bin/ping" , "-c", "1", "-t", "1", ip_addr, NULL);
}
else
{
printf("PID %d: waiting for child\n", getpid());
waitpid( child_pid, &statval, WUNTRACED
#ifdef WCONTINUED /* Not all implementations support this */
| WCONTINUED
#endif
);
if(WIFEXITED(statval))
printf("Child's exit code %d\n", WEXITSTATUS(statval));
else
printf("Child did not terminate with exit\n");
}
return 0;
}
N'hésitez pas à transformer cette réponse en une modification de la réponse d'AraK.