Научете командата Linux - изчакайте

име

чакайте, waitpid - изчакайте приключването на процеса

резюме

#include
#include

pid_t изчакайте (int * статус );
pid_t waitpid (pid_t pid , int * състояние , int опции );

описание

Функцията за изчакване спира изпълнението на текущия процес, докато детето излезе или докато не бъде изпратен сигнал, чието действие е да прекрати текущия процес или да се обади на функция за обработка на сигнали. Ако детето вече е излязло от времето на обаждането (т.нар. Процес "зомби"), функцията се връща незабавно. Всички системни ресурси, използвани от детето, се освобождават.

Функцията waitpid спира изпълнението на текущия процес, докато детето, както е определено от pid аргумента, излезе, или до получаване на сигнал, чието действие е да прекрати текущия процес или да се обади на функция за обработка на сигнали. Ако детето, поискано от pid , вече е излязло от времето на обаждането (т.нар. Процес "зомби"), функцията се връща незабавно. Всички системни ресурси, използвани от детето, се освобождават.

Стойността на pid може да бъде една от следните:

<-1

което означава да чакаме всеки детски процес, чийто идентификатор на група от процеси е равен на абсолютната стойност на pid .

-1

което означава да изчакате всяко дете процес; това е същото поведение, което чака експонати.

0

което означава да изчакате всеки детайлен процес, чийто идентификационен номер на процесната група е равен на процеса на обаждане.

> 0

което означава да чакате детето, чийто ID на процеса е равен на стойността на pid .

Стойността на опциите е OR или нула или повече от следните константи:

WNOHANG

което означава незабавно връщане, ако никое дете не е напуснало.

WUNTRACED

което означава връщане и на деца, които са спрени и чийто статут не е бил съобщен.

(За опции само за Linux, вижте по-долу.)

Ако състоянието не е NULL , изчакайте или waitpid или съхранявайте информацията за състоянието на мястото, посочено по статус .

Това състояние може да бъде оценено със следните макроси (тези макроси вземат буфера stat ( int ) като аргумент --- не указател към буфера!):

WIFEXITED ( статус )

е ненулева, ако детето излезе нормално.

WEXITSTATUS ( статус )

оценява до най-малко осемте бита на върнатия код на детето, което може да е било зададено като аргумент за извикване за излизане () или като аргумент за извлечение за връщане в главната програма. Този макрос може да бъде оценен само ако WIFEXITED се върна ненулево.

WIFSIGNALED ( статус )

връща истината, ако детският процес е напуснат поради сигнал, който не е бил уловен.

WTERMSIG ( статус )

връща номера на сигнала, който е довел до прекратяване на процеса. Този макрос може да бъде оценен само ако WIFSIGNALED се върна ненулево.

WIFSTOPPED ( статус )

връща истината, ако детският процес, който е причинил връщането, в момента е спрян; това е възможно само ако обаждането е било извършено чрез WUNTRACED .

WSTOPSIG ( статус )

връща номера на сигнала, който е накарал детето да спре. Този макрос може да бъде оценен само ако WIFSTOPPED се върна ненулево.

Някои версии на Unix (напр. Linux, Solaris, но не и AIX, SunOS) също определят макрос WCOREDUMP ( статус ), за да тестват дали процесорът на дъмпинговия процес на детето. Използвайте това само в #ifdef WCOREDUMP ... #endif.

Стойност на връщането

Идентификационният номер на процеса на детето, който е напуснал, или нула, ако WNOHANG е бил използван и няма дете, или -1 за грешка (в този случай errno е настроен на подходяща стойност).

грешки

ECHILD

ако процесът, посочен в pid не съществува или не е дете на процеса на повикване. (Това може да се случи за собственото си дете, ако действието за SIGCHLD е зададено на SIG_IGN. Вижте също секцията LINUX NOTES за темите.)

EINVAL

ако аргументът за опциите е невалиден.

EINTR

ако WNOHANG не е бил настроен и е бил хванат отблокиран сигнал или SIGCHLD .