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()

hit02
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Kernel
  • Postów:90
0

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


loop:
push 0FFFFFFFFh
call Sleep
jmp loop
edytowany 2x, ostatnio: hit02
0

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

hit02
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Kernel
  • Postów:90
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


loop:
push 0FFFFFFFFh
call Sleep
jmp loop
0

czyli muszę zrobić tak?

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

i jak dalej wywołać te funkcje?

hit02
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Kernel
  • Postów:90
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: :)

Kopiuj
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.");
}

loop:
push 0FFFFFFFFh
call Sleep
jmp loop
edytowany 1x, ostatnio: hit02
0

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

Kopiuj
 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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.