Leer die Linux-opdrag - wag

naam

wag, wag - wag vir prosesbeëindiging

opsomming

# sluit
#include

pid_t wag (int * status );
pid_t waitpid (pid_t pid , int * status , int opsies );

beskrywing

Die wagfunksie staak die uitvoering van die huidige proses totdat 'n kind verlaat het, of totdat 'n sein afgelewer word wie se aksie die huidige proses moet beëindig of 'n seinhanteringsfunksie moet bel. As 'n kind reeds op die tyd van die oproep verlaat het ('n sogenaamde "zombie" proses), word die funksie onmiddellik terug. Enige stelselhulpbronne wat deur die kind gebruik word, word bevry.

Die waglustfunksie skop die uitvoering van die huidige proses op totdat 'n kind soos deur die pid- argument gespesifiseer, verlaat het, of totdat 'n sein afgelewer word wie se aksie die huidige proses moet beëindig of 'n seinhanteringsfunksie moet bel. As 'n kind soos versoek deur pid reeds verlaat het op die tyd van die oproep ('n sogenaamde "zombie" proses), word die funksie onmiddellik terug. Enige stelselhulpbronne wat deur die kind gebruik word, word bevry.

Die waarde van pid kan een van die volgende wees:

<-1

wat beteken om te wag vir enige kindproses wie se prosesgroep ID gelyk is aan die absolute waarde van pid .

-1

wat beteken om te wag vir enige kinderproses; Dit is dieselfde gedrag wat uitstallings wag .

0

wat beteken om te wag vir enige kindproses wie se prosesgroep ID gelyk is aan dié van die roepproses.

> 0

wat beteken om te wag vir die kind wie se proses ID gelyk is aan die waarde van pid .

Die waarde van opsies is 'n OF van nul of meer van die volgende konstantes:

WNOHANG

wat beteken om dadelik terug te keer as geen kind verlaat het nie.

WUNTRACED

wat beteken om ook terug te keer vir kinders wat gestop word, en wie se status nie aangemeld is nie.

(Vir Linux-opsies, sien hieronder.)

As die status nie NULL is nie, wag of wag die winkelstatusinligting in die plek wat na status gewys word.

Hierdie status kan geëvalueer word met die volgende makros (hierdie makros neem die statbuffer ('n int ) as 'n argument --- nie 'n wyser na die buffer nie!):

WIFEXITED ( status )

is nie-nul indien die kind normaal verlaat word.

WEXITSTATUS ( status )

evalueer na die minste betekenisvolle agt stukkies van die terugskrywingskode van die kind wat beëindig is, wat moontlik gestel kan word as die argument vir 'n oproep om uit te gaan () of as die argument vir 'n opgawe in die hoofprogram. Hierdie makro kan slegs geëvalueer word as WIFEXITED nie-nul teruggekeer word.

WIFSIGNALED ( status )

gee terug as die kindproses verlaat het weens 'n sein wat nie gevang is nie.

WTERMSIG ( status )

gee die nommer van die sein terug wat veroorsaak het dat die kindproses beëindig word. Hierdie makro kan slegs geëvalueer word indien WIFSIGNALED nie-nul teruggestuur word.

WIFSTOPPED ( status )

opbrengste waar as die kindproses wat die opbrengs veroorsaak het, op die oomblik gestop word; Dit is slegs moontlik as die oproep gedoen is met WUNTRACED .

WSTOPSIG ( status )

gee die nommer van die sein terug wat veroorsaak het dat die kind moet stop. Hierdie makro kan slegs geëvalueer word as WIFSTOPPED nie-nul teruggekeer word.

Sommige weergawes van Unix (bv. Linux, Solaris, maar nie AIX, SunOS) definieer ook 'n makro WCOREDUMP ( status ) om te toets of die kind se kernproses gedompel word. Gebruik slegs hierdie ingeslote in #ifdef WCOREDUMP ... #endif.

Retourwaarde

Die proses-ID van die kind wat verlaat het, of nul as WNOHANG gebruik is en geen kind was beskikbaar nie, of -1 op fout (in welke geval errno op 'n toepaslike waarde gestel is).

foute

ECHILD

indien die proses gespesifiseer in pid bestaan ​​nie of is nie 'n kind van die roepproses nie. (Dit kan vir jou eie kind gebeur as die aksie vir SIGCHLD op SIG_IGN gestel is. Sien ook die LINUX NOTES-afdeling oor drade.)

EINVAL

as die opsie argument ongeldig was.

EINTR

as WNOHANG nie ingestel is nie en 'n ontgrendelde sein of 'n SIGCHLD gevang is.