Jifunze amri ya amri ya Linux

Jina

kusubiri, wait wait - kusubiri mchakato wa kukomesha

Sahihi

#include
#include

pid_t kusubiri (int * hali );
pid_t waitpid (pid_t pid , int * hali , int int );

Maelezo

Kazi ya kusubiri imesimamisha utekelezaji wa mchakato wa sasa mpaka mtoto ametoka, au mpaka ishara itatolewa ambayo hatua yake ni kusitisha mchakato wa sasa au kupiga simu ya utunzaji wa ishara. Ikiwa mtoto ameondolewa na wakati wa simu (mchakato unaoitwa "zombie"), kazi inarudi mara moja. Vyanzo vyote vya mfumo vinavyotumiwa na mtoto huwekwa huru.

Kazi ya kusubiri imesimamisha utekelezaji wa mchakato wa sasa mpaka mtoto kama ilivyoelezwa na hoja ya pid imetoka, au mpaka ishara itatolewa ambayo hatua yake ni kusitisha mchakato wa sasa au kupiga simu ya utunzaji wa ishara. Ikiwa mtoto kama aliyoomba na pid tayari ametoka wakati wa wito (mchakato unaoitwa "zombie"), kazi inarudi mara moja. Vyanzo vyote vya mfumo vinavyotumiwa na mtoto huwekwa huru.

Thamani ya pid inaweza kuwa moja ya:

<-1

ambayo ina maana ya kusubiri mchakato wowote wa mtoto ambao ID ya kundi la mchakato ni sawa na thamani kamili ya pid .

-1

ambayo ina maana ya kusubiri mchakato wowote wa mtoto; hii ni tabia sawa ambayo inasubiri maonyesho.

0

ambayo inamaanisha kusubiri mchakato wowote wa mtoto ambao ID ya kundi la mchakato ni sawa na ile ya mchakato wa wito.

> 0

ambayo ina maana ya kusubiri mtoto ambaye ID ya mchakato ni sawa na thamani ya pid .

Thamani ya chaguo ni AU ya sifuri au zaidi ya nyakati zifuatazo:

WNOHANG

ambayo inamaanisha kurudi mara moja ikiwa hakuna mtoto aliyeondoka.

WUNTRACED

ambayo inamaanisha kurudi kwa watoto ambao wamesimamishwa, na ambao hali haijaaripotiwa.

(Kwa chaguzi za Linux pekee, ona chini.)

Ikiwa hali si NULL , tumaa au taarifa ya hali ya duka ya waitpid katika eneo limeelezewa na hali .

Hali hii inaweza kuhesabiwa na macros zifuatazo (macros haya huchukua buffer ya stat ( int ) kama hoja --- si pointer kwa buffer!):

WIFEXITED ( hali )

sio sifuri kama mtoto ametoka kawaida.

WEXITSTATUS ( hali )

inatathmini kwa bits nane muhimu zaidi ya msimbo wa kurejea wa mtoto uliokomesha, ambao unaweza kuwa umewekwa kama hoja ya simu ya kuondoka () au kama hoja ya taarifa ya kurudi kwenye programu kuu. Hii kubwa inaweza tu kuchunguliwa ikiwa WIFEXITED kurudi si zero.

WIFSIGNALED ( hali )

inarudi kweli ikiwa mchakato wa mtoto uliondoka kwa sababu ya ishara ambayo haikugatwa.

WTERMSIG ( hali )

inarudi idadi ya ishara ambayo imesababisha mchakato wa mtoto kukomesha. Hii kubwa inaweza tu kupimwa ikiwa WIFSIGNALED imerejea sio sifuri.

WIFSTOPPED ( hali )

inarudi kweli ikiwa mchakato wa mtoto uliosababisha kurudi kwa sasa umesimamishwa; hii inawezekana tu kama wito ulifanyika kwa kutumia WUNTRACED .

WSTOPSIG ( hali )

inarudi idadi ya ishara ambayo imesababisha mtoto kuacha. Hii kubwa inaweza tu kuhesabiwa ikiwa WIFSTOPPED irudi sio sifuri.

Vipengele vingine vya Unix (kwa mfano Linux, Solaris, lakini si AIX, SunOS) pia hufafanua WCOREDUMP ( hali ) kubwa ili kuhakikisha kama mchakato wa mtoto ulipungua msingi. Tumia tu hii iliyofungwa katika #ifdef WCOREDUMP ... #endif.

Rejea Thamani

Kitambulisho cha utaratibu wa mtoto kilichotoka, au sifuri ikiwa WNOHANG ilitumiwa na hakuna mtoto aliyepatikana , au -1 kwa kosa (katika kesi hiyo errno imewekwa kwa thamani sahihi).

Hitilafu

ECHILD

ikiwa mchakato uliotajwa pid haipo au si mtoto wa mchakato wa wito. (Hii inaweza kutokea kwa mtoto wako mwenyewe ikiwa hatua ya SIGCHLD imewekwa SIG_IGN. Angalia pia sehemu ya LINUX VIDOKA kuhusu nyuzi.)

EINVAL

kama hoja ya chaguzi ilikuwa batili.

EINTR

ikiwa WNOHANG haikuwekwa na ishara isiyozuiwa au SIGCHLD ilipatikana.