Naučte sa príkaz Linux - počkajte

názov

počkajte, waitpid - čakajte na ukončenie procesu

synopse

#include
#include

pid_t čakať (int * stav );
pid_t waitpid (pid_t pid , int * stav , int voľby );

popis

Funkcia čakania pozastaví vykonanie aktuálneho procesu, kým dieťa nevystúpi, alebo kým nedôjde k vysielaniu signálu, ktorého úlohou je ukončiť aktuálny proces alebo zavolať funkciu spracovania signálu. Ak dieťa už uplynulo počas hovoru (takzvaný proces "zombie"), funkcia sa okamžite vráti. Akékoľvek systémové prostriedky používané dieťaťom sú uvoľnené.

Funkcia waitpid pozastaví vykonanie aktuálneho procesu, kým dieťa, ako bolo špecifikované argumentom pid, prestane, alebo kým sa nedoručí signál, ktorého úlohou je ukončiť aktuálny proces alebo zavolať funkciu spracovania signálu. Ak dieťa, ktoré požaduje pid , už skončilo v čase hovoru (takzvaný proces "zombie"), funkcia sa okamžite vráti. Akékoľvek systémové prostriedky používané dieťaťom sú uvoľnené.

Hodnota pid môže byť jedna z nasledujúcich:

<-1

čo znamená čakať na akýkoľvek podriadený proces, ktorého ID skupiny procesov sa rovná absolútnej hodnote pid .

-1

čo znamená čakať na akýkoľvek proces dieťaťa; to je to isté správanie, ktoré čaká vystavuje.

0

čo znamená čakať na akýkoľvek podriadený proces, ktorého identifikácia procesnej skupiny sa rovná ID procesu volajúceho.

> 0

čo znamená čakať na dieťa, ktorého ID procesu sa rovná hodnote pid .

Hodnota volieb je OR nula alebo viac z nasledujúcich konštánt:

WNOHANG

čo znamená návrat okamžite, ak neopustil žiadne dieťa.

WUNTRACED

čo znamená návrat aj deťom, ktoré sú zastavené a ktorých stav nebol zaznamenaný.

(Voľby iba pre Linux nájdete nižšie.)

Ak stav nie je NULL , počkajte alebo čakajú na uloženie stavových informácií na mieste označenom stavom .

Tento stav je možné vyhodnotiť pomocou nasledujúcich makier (tieto makrá berú stat buffer ( int ) ako argument --- nie ukazovateľ na vyrovnávaciu pamäť!):

WIFEXITED ( stav )

je nenulová, ak dieťa normálne skončilo.

WEXITSTATUS ( stav )

vyhodnotí sa na najmenej signifikantných osem bitov návratového kódu dieťaťa, ktoré bolo ukončené, čo môže byť nastavené ako argument pre volanie na ukončenie () alebo ako argument pre návratový príkaz v hlavnom programe. Toto makro možno vyhodnotiť iba vtedy, ak WIFEXITED vráti nenulovú hodnotu.

WIFSIGNALED ( stav )

vracia pravý, ak sa podriadený proces ukončil kvôli signálu, ktorý nebol chytený.

WTERMSIG ( stav )

vráti číslo signálu, ktorý spôsobil ukončenie podriadeného procesu. Toto makro možno vyhodnotiť len vtedy, ak WIFSIGNALED vráti nenulovú hodnotu.

WIFSTOPPED ( stav )

vracia pravdivý, ak je detský proces, ktorý spôsobil návrat, v súčasnosti zastavený; je to možné len vtedy, ak bol hovor uskutočnený pomocou služby WUNTRACED .

WSTOPSIG ( stav )

vráti číslo signálu, ktorý spôsobil zastavenie dieťaťa. Toto makro možno vyhodnotiť len vtedy, ak WIFSTOPPED vráti nenulovú hodnotu.

Niektoré verzie systému Unix (napr. Linux, Solaris, ale nie AIX, SunOS) tiež definujú makro WCOREDUMP ( stav ) na overenie toho, či sa podradené jadro spracúva. Používajte ho iba v #ifdef WCOREDUMP ... #endif.

Hodnota návratnosti

ID procesu dieťaťa, ktoré sa skončilo, alebo nula, ak bol použitý WNOHANG a žiadne dieťa nebolo k dispozícii, alebo -1 o chybe (v takom prípade je chyba nastavená na príslušnú hodnotu).

chyby

ECHILD

ak proces uvedený v pid neexistuje alebo nie je dieťaťom volajúceho procesu. (To sa môže stať pre vlastné dieťa, ak je akcia pre SIGCHLD nastavená na hodnotu SIG_IGN. Pozri tiež sekciu LINUX NOTES o vláknach.)

EINVAL

ak bol parameter voľby neplatný.

EINTR

ak WNOHANG nebol nastavený a odblokovaný signál alebo SIGCHLD bol chytený.