Aflați comanda Linux - așteptați

Nume

așteptați, waitpid - așteptați terminarea procesului

Rezumat

# include
#include

pid_t așteptați (int * status );
pid_t waitpid (pid_t pid , int * status , int opțiuni );

Descriere

Funcția de așteptare suspendă executarea procesului curent până la ieșirea unui copil sau până la primirea unui semnal al cărui acțiune este de a termina procesul curent sau de a apela o funcție de manipulare a semnalelor. Dacă un copil a ieșit deja din timpul apelului (așa-numitul proces "zombie"), funcția revine imediat. Orice resurse de sistem folosite de copil sunt eliberate.

Funcția waitpid suspendă executarea procesului curent până când un copil, așa cum a fost specificat de argumentul pid, a ieșit sau până când este emis un semnal al cărui acțiune este de a termina procesul curent sau de a apela o funcție de manipulare a semnalelor. Dacă un copil, așa cum a solicitat pid, a ieșit deja din timpul apelului (așa-numitul proces "zombie"), funcția revine imediat. Orice resurse de sistem folosite de copil sunt eliberate.

Valoarea pid poate fi una dintre următoarele:

<-1

ceea ce înseamnă să așteptați orice proces copil al cărui ID de grup de proces este egal cu valoarea absolută a pid .

-1

ceea ce înseamnă să aștepți orice proces copil; acesta este același comportament care așteaptă exponatele.

0

ceea ce înseamnă să așteptați orice proces copil al cărui ID de grup de proces este egal cu cel al procesului de apelare.

> 0

ceea ce înseamnă să aștepți copilul al cărui ID de proces este egal cu valoarea lui pid .

Valoarea opțiunilor este un OR de zero sau mai multe dintre următoarele constante:

WNOHANG

ceea ce înseamnă să se întoarcă imediat dacă nici un copil nu a ieșit.

WUNTRACED

ceea ce înseamnă returnarea, de asemenea, a copiilor care sunt opriți și a căror statut nu a fost raportat.

(Pentru opțiunile numai pentru Linux, consultați mai jos.)

Dacă starea nu este NULL , așteptați sau așteptați informații despre starea magazinului în locația indicată prin stare .

Această stare poate fi evaluată cu ajutorul următoarelor macrocomenzi (aceste macrocomenzi iau tamponul stat (un int ) ca argument - nu un pointer la tampon!):

WIFEXITED ( status )

este diferită de zero dacă copilul a ieșit în mod normal.

WEXITSTATUS ( status )

evaluează cele mai puțin semnificative opt biți din codul de returnare al copilului care a încetat, care poate fi stabilit ca argument pentru un apel de ieșire () sau ca argument pentru o declarație de returnare din programul principal. Această macrocomandă poate fi evaluată numai dacă WIFEXITED nu a revenit la zero.

WIFSIGNALED ( stare )

returnează adevărat dacă procesul copilului a ieșit din cauza unui semnal care nu a fost prins.

WTERMSIG ( status )

returnează numărul semnalului care a determinat terminarea procesului copilului. Această macrocomandă poate fi evaluată numai dacă WIFSIGNALED a revenit la zero.

WIFSTOPPED ( status )

returnează adevărat dacă procesul copil care a provocat returnarea este în prezent oprit; acest lucru este posibil numai dacă apelul a fost efectuat utilizând WUNTRACED .

WSTOPSIG ( starea )

returnează numărul semnalului care a determinat oprirea copilului. Această macrocomandă poate fi evaluată numai dacă WIFSTOPPED nu a revenit la zero.

Unele versiuni de Unix (de exemplu, Linux, Solaris, dar nu AIX, SunOS) definesc de asemenea o macro WCOREDUMP ( status ) pentru a testa dacă procesul copilului de bază de dumping. Utilizați acest lucru numai în #ifdef WCOREDUMP ... #endif.

Valoare returnată

Identificarea procesului copilului care a ieșit sau zero dacă WNOHANG a fost utilizat și niciun copil nu era disponibil sau -1 pentru eroare (caz în care errno este setat la o valoare adecvată).

Erori

ECHILD

dacă procesul specificat în pid nu există sau nu este copil al procesului de chemare. (Acest lucru se poate întâmpla pentru copilul propriu dacă acțiunea pentru SIGCHLD este setată la SIG_IGN. Vezi și secțiunea LINUX NOTES despre fire.)

EINVAL

dacă argumentul opțiunilor era nevalid.

EINTR

dacă WNOHANG nu a fost setat și un semnal deblocat sau un SIGCHLD a fost prins.