Ha avuto difficoltà a capire e applicare le risposte esistenti.
In AraK's answer, se l'applicazione ha più di un processo figlio in esecuzione, non è possibile sapere quale specifico processo figlio ha prodotto lo stato di uscita ottenuto. Secondo la pagina man,
wait() e waitpid()
Il wait() chiamata di sistema sospende l'esecuzione del processo chiamante fino uno dei suoi figli termina. La chiamata di attesa (& stato) è equivalente a:
waitpid(-1, &status, 0);
The **waitpid()** system call suspends execution of the calling process until a **child specified by pid** argument has changed state.
Quindi, per ottenere lo stato di uscita di un processo figlio specifica dovremmo riscrivere la risposta come:
#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;
}
Sentitevi liberi di trasforma questa risposta in una modifica della risposta di AraK.
Grazie a tutti per le vostre risposte utili e veloci. – skujins