Անուն
սպասեք, waitpid - սպասեք գործընթացի դադարեցմանը
Սինոփսիս
#include
#include
pid_t սպասել (int * կարգավիճակ );
pid_t waitpid (pid_t pid , ինտ * կարգավիճակը , ինտ տարբերակները );
Նկարագրություն
Սպասարկման ֆունկցիան դադարեցնում է ընթացիկ գործընթացի կատարումը, մինչեւ երեխան դուրս է եկել, կամ մինչեւ ազդանշան է մատուցվում, որի գործողությունն է դադարեցնել ընթացիկ գործընթացը կամ զանգահարել ազդանշանային գործառույթ: Եթե երեխա արդեն դուրս է եկել զանգի (այսպես կոչված «zombie» գործընթացը) ժամանակ, ֆունկցիան անմիջապես վերադառնում է: Երեխայի կողմից օգտագործվող ցանկացած համակարգի ռեսուրսներ ազատվում են:
The waitpid գործառույթը դադարեցնում է ընթացիկ գործընթացի կատարումը, մինչեւ երեխան, ինչպես նշված է pid- ի փաստարկի կողմից, կամ մինչեւ ազդանշան է մատուցվում, որի գործողությունը պետք է դադարեցնել ընթացիկ գործընթացը կամ զանգահարել ազդանշանային գործառույթ: Եթե երեխային, ինչպես պահանջում է pid- ը, արդեն դուրս է եկել զանգի (այսպես կոչված, «zombie» գործընթացը), ֆունկցիան անմիջապես վերադառնում է: Երեխայի կողմից օգտագործվող ցանկացած համակարգի ռեսուրսներ ազատվում են:
Pid- ի արժեքը կարող է լինել հետեւյալը.
<-1
ինչը նշանակում է սպասել որեւէ երեխայի գործընթացին, որի գործընթացային խմբի ID- ն հավասար է pid- ի բացարձակ արժեքին:
-1
ինչը նշանակում է սպասել ցանկացած երեխայի գործընթացին. սա նույն վարքագիծն է, որը սպասում է ցուցանմուշներին:
0
ինչը նշանակում է սպասել որեւէ երեխայի գործընթացին, որի գործընթացային խմբի ID- ն հավասար է զանգահարելու գործընթացին:
> 0
ինչը նշանակում է սպասել երեխայի համար, որի ընթացիկ ID- ն հավասար է pid- ի արժեքին:
Ընտրանքների արժեքը OR- ը զրոյից կամ ավելի է հետեւյալ հաստատուններից.
WNOHANG- ը
որը նշանակում է անմիջապես վերադարձնել, եթե ոչ մի երեխա դուրս չի եկել:
WUNTRACED- ը
ինչը նշանակում է նաեւ վերադարձնել այն երեխաներին, որոնք դադարում են, եւ որի կարգավիճակը չի հաղորդվում:
(Linux- ի միայն ընտրանքների համար տես ստորեւ):
Եթե կարգավիճակը NULL չէ, սպասեք կամ waitpid խանութի կարգավիճակի մասին տեղեկությունները գտնվելու վայրում նշեք կարգավիճակը :
Այս կարգավիճակը կարելի է գնահատել հետեւյալ մակրոով (այս մակրոները վերցնում են stat buffer ( int ) որպես argument --- ոչ նշիչ բուֆերային համար):
WIFEXITED ( կարգավիճակ )
ոչ զրոյական է, եթե երեխան սովորաբար դուրս է եկել:
WEXITSTATUS ( կարգավիճակ )
գնահատվում է երեխայի վերադարձի կոդի նվազագույն զգալի ութ բիթը, որը դադարեցվել է, որը կարող է սահմանվել որպես ելքի կոչման փաստարկ () կամ որպես հիմնական ծրագրի մեջ վերադարձի հայտարարության փաստարկ: Այս մակրոտնտեսականը կարող է գնահատվել, եթե WIFEXITED- ը վերադարձվի ոչ զրո:
WIFSIGNALED ( կարգավիճակ )
վերադարձնում է ճիշտ, եթե երեխայի գործընթացը դուրս է եկել ազդանշանի պատճառով, որը չի բռնվել:
WTERMSIG ( կարգավիճակ )
վերադարձնում է երեխայի գործընթացի դադարեցման պատճառած ազդանշանի թիվը: Այս մակրոտնտեսությունը կարող է գնահատվել միայն այն դեպքում, երբ WIFSIGNALED- ը վերադարձավ ոչ զրո:
WIFSTOPPED ( կարգավիճակ )
վերադարձնում է ճշմարիտ, եթե ներկայումս դադարեցված է վերադարձի պատճառած երեխայի գործընթացը. սա միայն հնարավոր է, եթե զանգը կատարվի WUNTRACED- ի միջոցով :
WSTOPSIG ( կարգավիճակ )
վերադարձնում է երեխայի դադարեցման պատճառ հանդիսացած ազդանշանների թիվը: Այս մակրոտնտեսականը կարող է գնահատվել միայն այն դեպքում, եթե WIFSTOPPED- ը չվերադարձավ ոչ զրո:
Յունիքսի որոշ տարբերակները (օրինակ, Linux, Solaris, բայց ոչ AIX, SunOS) նաեւ սահմանում են WCOREDUMP մակրո ( կարգավիճակ ) մակրո, ստուգելու, արդյոք երեխայի գործընթացը տապալված է: Միայն այս դրույթն օգտագործեք #ifdef WCOREDUMP ... #endif- ում:
Վերադարձի արժեքը
Երեխայի ընթացիկ ID- ն, որը դուրս է եկել կամ զրոյական է, WNOHANG- ը օգտագործվել է, եւ ոչ մի երեխա չի եղել, կամ -1 սխալով (որի դեպքում errno- ն սահմանվում է համապատասխան արժեք):
Սխալներ
ECHILD
եթե գործընթացում նշված գործընթացը pid- ը գոյություն չունի կամ կոչման գործընթացի երեխա չէ: (Սա կարող է պատահի մեկի սեփական երեխայի համար, եթե SIGCHLD- ի համար գործողությունը սահմանվի SIG_IGN- ն: Տես նաեւ LINUX- ի ծանուցումները բաժինների մասին):
EINVAL- ը
եթե ընտրանքի փաստարկը անվավեր է:
EINTR
եթե WNOHANG- ը չկարգավորվեր եւ արգելափակված ազդանշան կամ SIGCHLD- ը բռնվեց: