hatte Schwierigkeiten Verständnis und Anwendung der bestehenden Antworten.
In AraK's answer, wenn die Anwendung mehr als einen untergeordneten Prozess ausgeführt hat, ist es nicht möglich zu wissen, welcher bestimmte untergeordnete Prozess den erhaltenen Exit-Status erzeugte. Nach der Manpage
wait() und waitpid()
Die wait() Systemaufruf unterbricht die Ausführung des aufrufenden Prozesses bis eines seiner Kinder endet. Der Ruf wait (& Status) entspricht:
waitpid(-1, &status, 0);
The **waitpid()** system call suspends execution of the calling process until a **child specified by pid** argument has changed state.
Also, den Exit-Status eines bestimmten untergeordneten Prozess zu erhalten, sollten wir die Antwort umschreiben als:
#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;
}
Sek Verwandle diese Antwort in eine Bearbeitung von AraKs Antwort.
Vielen Dank für Ihre nützlichen und schnellen Antworten. – skujins