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ý.