Սովորեք Linux հրամանատարին `սպասեք

Անուն

սպասեք, 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- ը բռնվեց: