wait

0

Witam,
jak zrobić aby proces pierwotny czekał na proces potomny i aby otrzymał status z jakim zakończył się potomek?

0

Dodam że proces potomny wywołuje funkcją fork()

0

Nie sprawdzałem, czy się nie mylę, ale waitpid(pid, NULL, 0); powinno zadziałać. :)

0

funkcja zwraca mi pida procesu a ja potrzebuje wynik jego zakończenia

0

Gdy podasz argument status do waitpid(), a potem przepuścisz go przez WIFEXITED() i WEXITSTATUS() to powinieneś otrzymać kod wyjścia.
https://linux.die.net/man/2/waitpid

0

czyli muszę zrobić tak?

 int status;
waitpid(-1, &status, 0);

i jak dalej wywołać te funkcje?

0

Jak wcześniej mówiłem nie sprawdzam tego, bo nie mam pod ręką Linuxa, ale zrobił bym to mniej więcej tak: :)

int status = 0;
int returnCode = 0;
pid_t pid = fork();
waitpid(pid, &status, 0);
if(WIFEXITED(status)) {
    returnCode = WEXITSTATUS(status);
    printf("Proces returned %i", &returnCode);
}
else {
    puts("Proces terminated, but not exited normally.");
}
0

Ok dzięki za pomoc :)
zrobiłem to po prostu

 int status;
wait(&status);
cout<<status;

wydaje mi się że zwraca dobry wynik (spodziewaną przeze mnie wartość) niech wypowie się ktoś czy to jest faktycznie to czego oczekuję czy może przypadek :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1