2009-10-29 16 views
7

Kiedy czekam na konkretną działającą grupę procesów, która jest procesem podrzędnym, funkcja WIFEXITED zwraca wartość true, mówiąc o zakończeniu procesu? Czy tak to działa? Wydaje się, że jest coś nie mam zrozumienia ....Dlaczego WIFEXITED ma wartość True Return w uruchomionym procesie?

if (waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG) == -1) 
    perror("Wait error"); 

if (WIFEXITED(pstatus)) { 
    strncpy(buf, "Exited", buf_size); 
    return 0; 

Odpowiedz

6

Jak podano WNOHANG myślę waitpid wraca 0 i pstatus ma wartość to przedtem tak WIFEXITED nie pracuje ze zaktualizowanymi danymi.

jeśli WNOHANG została określona i jeden lub więcej z dzieckiem (dziećmi) określony przez pid istnieje, ale jeszcze nie zmieniony stan, następnie 0 jest zwracany.

+0

Ah, zrobiłem Reinitialize 0, ale teraz jakby zrozumieć. ale nie bardzo rozumiem, jak stwierdzić, czy coś jest nadal uruchomione lub czy zostało zakończone (bez blokowania). –

+0

Jeśli którekolwiek z twoich dzieci zmieniło status (zmarł) waitpid zwróci dodatnią liczbę. –

+0

Och, rozumiem teraz ... Potrzebuję przyjąć zarówno wartość zwracaną, jak i wartość statusu, aby uzyskać status procesu. (Wartość zwracana nie dotyczy tylko błędu lub nie). Dziękuję Ci! –

1

waitpid zwraca zwinięty pid potomny, jeśli z powodzeniem pobiera dziecko. W przypadku użycia z WNOHANG, natychmiast zwraca 0, jeśli żadne dziecko nie zakończyło pracy. W związku z tym należy sprawdzić, czy zwracana wartość to 0 lub pid przed sprawdzeniem status. Zobacz tutaj szczegóły:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html

Powiązane problemy