Lernu la Linuksan Komandon - atendu

Nomo

atendu, atendu - atendu procezon finiĝon

Sinopsis

#include
#include

pid_t atendu (int * statuso );
pid_t waitpid (pid_t pid , int * statuso , int opcioj );

Priskribo

La atendo- funkcio malakceptas la ekzekuton de la nuna procezo ĝis infano eliris, aŭ ĝis signalo estas transdonita, kies ago estas fini la nunan procezon aŭ nomi signalon-prilaborado. Se infano jam forlasis la tempon de la alvoko (nomita "zombie" procezo), la funkcio revenas tuj. Ajna sistemo-rimedoj uzataj de la infano liberigas.

La atenta funkcio malakceptas la ekzekuton de la nuna procezo ĝis infano, kiel la pid- argumento eliris, aŭ ĝis signalo estas transdonita, kies ago estas por nuligi la aktualan procezon aŭ nomi signalon-uzado. Se infano laŭ peto de pid jam eliris de la tempo de la alvoko (nomita "zombie" procezo), la funkcio revenas tuj. Ajna sistemo-rimedoj uzataj de la infano liberigas.

La valoro de pid povas esti unu el:

<-1

kio signifas atendi ajnan infanan procezon kies proceza grupo ID estas egala al la absoluta valoro de pid .

-1

Kiu signifas atendi ajnan infanan procezon; ĉi tiu estas la sama konduto, kiun atendas montri.

0

kio signifas atendi ajnan infanan procezon kies proceza grupo ID estas egala al tiu de la vokanta procezo.

> 0

kio signifas atendi la infanon, kies procezo ID estas egala al la valoro de pid .

La valoro de ebloj estas OR de nulo aŭ pli da la jenaj konstantaj:

WNOHANG

kio signifas reveni tuj se neniu infano eliris.

WUNTRACED

kio signifas ankaŭ reveni por infanoj, kiuj estas haltitaj, kaj kies statuso ne estis raportita.

(Por la ebloj de Linukso nur, vidu sube.)

Se la statuso ne estas nula , atenduatenda starejo-datuma statuso en la loko montrita per statuso .

Ĉi tiu statuso povas esti taksata per la sekvaj macros (ĉi tiuj makroj prenas la statan bufro ( int ) kiel argumento --- ne puntero al la bufro!):

WIFEXITED ( statuso )

estas ne-nulo se la infano eliras kutime.

WEXITSTATO ( statuso )

taksas al la almenaŭ signifa ok bitoj de la rondkodo de la infano, kiu finiĝis, kio povus esti difinita kiel la argumento al alvoko al eliro () aŭ kiel la argumento por rondveturo en la ĉefa programo. Ĉi tiu makro nur povas esti taksita se WIFEXITED revenis ne-nulo.

WIFSIGNALED ( statuso )

revenas vera se la infana procezo eliris pro signalo, kiu ne estis kaptita.

WTERMSIG ( statuso )

redonas la nombro de la signalo, kiu kaŭzis la infanan procezon fini. Ĉi tiu makro nur povas esti taksata se WIFSIGNALED revenis ne-nulo.

WIFSTOPPED ( statuso )

revenas vera se la infana procezo, kiu kaŭzis la rondveturon, estas nun haltita; ĉi tio nur eblas se la alvoko fariĝis uzante WUNTRACED .

WSTOPSIG ( statuso )

redonas la nombro de la signalo, kiu kaŭzis la infanon halti. Ĉi tiu makro nur povas esti taksita se WIFSTOPPED revenis ne-nulo.

Iuj versioj de Unikso (ekz. Linux, Solaris, sed ne AIX, SunOS) ankaŭ difinas macro WCOREDUMP ( statuso ) por provi ĉu la infana procezo dumpis kernon. Nur uzu ĉi tion enfermita en #ifdef WCOREDUMP ... #endif.

Rezerva valoro

La procezo-identigo de la infano, kiu eliris, aŭ nulo se WNOHANG estis uzata kaj neniu infano estis disponebla, aŭ -1 per eraro (en tiu kazo errno estas taŭga al taŭga valoro).

Eraroj

EKILDO

Se la procezo specifita en pid ne ekzistas aŭ ne estas infano de la nomata procezo. (Ĉi tio povas okazi por propra infano, se la agado por SIGCHLD estas agordita al SIG_IGN. Vidu ankaŭ la sekcion de LINUX NOTES pri fadenoj.)

EINVALO

se la ebloj argumentis nevalida.

EINTR

se WNOHANG ne estis fiksita kaj senŝaltita signalo aŭ SIGCHLD estis kaptita.