Запознајте се со командата за 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 .

Вредноста на опциите е ОР од нула или повеќе од следните константи:

WNOHANG

што значи веднаш да се врати ако ниедно дете не излезе.

WUNTRACED

што значи да се вратат и за деца кои се запрени и чиј статус не е пријавен.

(За опциите за Линукс, видете подолу.)

Ако статусот не е NULL , почекајте или waitpid ги зачувува информациите за статусот на локацијата посочена со статус .

Овој статус може да се процени со следните макроа (овие макроа го земаат stat buffer ( 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 бил фатен.