Naučte se příkaz Linux - počkejte

název

počkat, waitpid - počkat na ukončení procesu

Synopse

#include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * stav , int volby );

Popis

Funkce čekání pozastaví provádění aktuálního procesu, dokud dítě neodejde, nebo dokud nebude doručen signál, jehož úkolem je ukončení aktuálního procesu nebo volání funkce zpracování signálu. Pokud dítě již skončilo v době volání (tzv. "Zombie"), funkce se okamžitě vrátí. Jakékoli systémové prostředky používané dítětem jsou uvolněny.

Funkce waitpid pozastaví provádění aktuálního procesu, dokud nedojde k ukončení dítěti, jak je uvedeno v argumentu pid , nebo dokud nebude vydán signál, jehož úkolem je ukončení aktuálního procesu nebo vyvolání funkce zpracování signálu. Pokud dítě, které požaduje pid , již skončilo v době volání (tzv. "Zombie"), funkce se okamžitě vrátí. Jakékoli systémové prostředky používané dítětem jsou uvolněny.

Hodnota pid může být jedna z následujících:

<-1

což znamená čekat na jakýkoli podřízený proces, jehož ID skupiny procesů se rovná absolutní hodnotě pid .

-1

což znamená čekat na jakýkoli proces dítěte; to je stejné chování, které čeká exponáty.

0

což znamená čekat na jakýkoli podřízený proces, jehož ID skupiny procesů se rovná hodnotě volajícího procesu.

> 0

což znamená čekat na dítě, jehož ID procesu se rovná hodnotě pid .

Hodnota voleb je OR nebo nula nebo více z následujících konstant:

WNOHANG

což znamená okamžitě se vrátit, pokud žádné dítě nevystoupilo.

WUNTRACED

což znamená vrátit i děti, které jsou zastaveny a jejichž status nebyl hlášen.

(Pro možnosti pouze pro Linux viz níže.)

Pokud stav není NULL , počkejte nebo čekajte na uložení informací o stavu v místě, které je označeno stavem .

Tento stav je možné vyhodnotit pomocí následujících maker (tyto makra berou stat buffer ( int ) jako argument --- ne ukazatel na vyrovnávací paměť!):

WIFEXITED ( stav )

je nenulová, pokud dítě normálně opustilo.

WEXITSTATUS ( stav )

vyhodnocuje nejméně významné osm bitů návratového kódu dítěte, které bylo ukončeno, což může být nastaveno jako argument pro volání k ukončení () nebo jako argument pro návratový příkaz v hlavním programu. Toto makro lze vyhodnotit pouze tehdy, když WIFEXITED vrátil nenulovou hodnotu.

WIFSIGNALED ( stav )

vrátí true, jestliže podřízený proces skončil kvůli signálu, který nebyl chycen.

WTERMSIG ( stav )

vrátí číslo signálu, který způsobil ukončení podřízeného procesu. Toto makro lze vyhodnotit pouze tehdy, když WIFSIGNALED vrátil nenulovou hodnotu.

WIFSTOPPED ( stav )

vrací true, pokud je podřízený proces, který způsobil návrat, ukončen; to je možné pouze v případě, že byl hovor uskutečněn pomocí služby WUNTRACED .

WSTOPSIG ( stav )

vrátí číslo signálu, který způsobil zastavení dítěte. Toto makro lze vyhodnotit pouze tehdy, pokud WIFSTOPPED vrátil nenulovou hodnotu.

Některé verze systému Unix (např. Linux, Solaris, ale nikoliv AIX, SunOS) také definují makro WCOREDUMP ( stav ), který testuje, zda dělení dědictví zpracovává jádro. Tuto funkci použijte pouze v #ifdef WCOREDUMP ... #endif.

Návratová hodnota

ID procesu dítěte, které skončilo, nebo nula, pokud byl použit WNOHANG a žádné dítě nebylo k dispozici, nebo -1 chyba (v tomto případě je errno nastavena na odpovídající hodnotu).

Chyby

ECHILD

pokud proces uvedený v odstavci pid neexistuje nebo není dítě volajícího procesu. (To se může stát pro vlastní dítě, pokud je akce SIGCHLD nastavena na hodnotu SIG_IGN. Viz také část LINUX NOTES o vláknech.)

EINVAL

pokud byl argument možností neplatný.

EINTR

pokud WNOHANG nebyl nastaven a odemkl signál nebo SIGCHLD byl chycen.