Preberite Linux ukaz - počakajte

Ime

čakaj, počakaj - počakaj na zaključek procesa

Povzetek

#include
#include

pid_t čakati (int * status );
pid_t waitpid (pid_t pid , int * status , int možnosti );

Opis

Funkcija čakanja prekine izvajanje trenutnega postopka, dokler otrok ne izstopi ali dokler ni dostavljen signal, katerega dejanje je končanje trenutnega postopka ali klicanje funkcije za upravljanje signalov. Če je otrok že do konca klica (tako imenovani postopek "zombi"), se funkcija vrne takoj. Vsak sistemski vir, ki ga uporablja otrok, se sprosti.

Funkcija počakajoče točke ustavi izvajanje trenutnega postopka, dokler otrok, kot je določen s pidovim argumentom, ni zapustil ali dokler ni dostavljen signal, katerega dejanje je končanje trenutnega postopka ali klicanje funkcije za obdelavo signalov. Če je otrok, kot je zahteval pid , že zapustil do klica (tako imenovani postopek "zombi"), se funkcija vrne takoj. Vsak sistemski vir, ki ga uporablja otrok, se sprosti.

Vrednost PID je lahko ena od:

<-1

kar pomeni, da počaka vsak otrok proces, katerega ID skupine procesov je enaka absolutni vrednosti pid .

-1

kar pomeni počakati na kakršen koli otroški proces; to je isto vedenje, ki čakajo razstavlja.

0

kar pomeni, da počakate na vsak otrokov postopek, katerega ID- je procesne skupine je enako kot pri procesu klica.

> 0

kar pomeni, da počakate na otroka, katerega ID procesa je enaka vrednosti pid .

Vrednost možnosti je OR od nič ali več naslednjih konstant:

WNOHANG

kar pomeni, da se takoj vrne, če otrok ni zapustil.

WUNTRACED

kar pomeni tudi vrnitev otrokom, ki so ustavljeni, in o katerih statusu ni poročal.

(Za možnosti samo za Linux glejte spodaj.)

Če stanje ni NULL , počakajte ali počakajte, shranite podatke o stanju na lokaciji, ki jo označuje stanje .

Ta status je mogoče ovrednotiti z naslednjimi makri (ti makri sprejmejo stat buffer ( int ) kot argument --- ne kazalec na pufer!):

WIFEXITED ( status )

je nična, če otrok običajno zapusti.

WEXITSTATUS ( status )

oceni najmanj osem bitov povratne kode otroka, ki se je končal, kar je morda bilo določeno kot argument za poziv k izstopu () ali kot argument za izjavo o vrnitvi v glavnem programu. Ta makro se lahko oceni le, če je WIFEXITED vrnil ničlo.

WIFSIGNALED ( status )

vrne res, če je otroški proces zapustil zaradi signala, ki ni bil ujet.

WTERMSIG ( status )

vrne številko signala, ki je povzročil zaključek otrokovega postopka. Ta makro se lahko oceni samo, če je WIFSIGNALED vrnil ničlo.

WIFSTOPPED ( status )

vrne res, če je otroški postopek, ki je povzročil vrnitev, trenutno ustavljen; to je mogoče le, če je bil klic izveden z uporabo WUNTRACED .

WSTOPSIG ( status )

vrne številko signala, zaradi katerega se otrok ustavi. Ta makro je mogoče oceniti le, če se WIFSTOPPED vrne neveljavno.

Nekatere različice Unixa (npr. Linux, Solaris, vendar ne AIX, SunOS) določajo tudi makro WCOREDUMP ( status ), da preizkusijo, ali je otroški proces dampiral jedro. Uporabite to samo v #ifdef WCOREDUMP ... #endif.

Vrnjena vrednost

Identifikacijska številka otroka, ki je izstopila, ali nič, če je bila uporabljena WNOHANG in ni bil razpoložljiv noben otrok, ali -1 pri napaki (v tem primeru je errno nastavljena na ustrezno vrednost).

Napake

ECHILD

če je postopek določen v pid ne obstaja ali ni otrok klica. (To se lahko zgodi za lastnega otroka, če je dejanje za SIGCHLD nastavljeno na SIG_IGN. Glejte tudi razdelek LINUX NOTES o nitih.)

EINVAL

če je argument o možnosti neveljaven.

EINTR

če WNOHANG ni nastavljen in je bil blokiran signal odblokiranega ali SIGCHLD .