Aprende o comando Linux: espera

Nome

agardar, agardar - agardar a finalización do proceso

Sinopse

#include
#include

pid_t esperar ( estado int * );
pid_t waitpid (pid_t pid , int * status , int options );

Descrición

A función de espera suspende a execución do proceso actual ata que saia un neno ou ata que se entrega un sinal cuxa acción é terminar o proceso actual ou chamar a unha función de manexo de sinal. Se un neno xa saíu ao momento da chamada (un proceso chamado "zombie"), a función devolve de inmediato. Os recursos do sistema utilizados polo neno son liberados.

A función waitpid suspende a execución do proceso actual ata que saia un neno especificado polo argumento pid ou ata que se entrega un sinal cuxa acción é terminar o proceso actual ou chamar a unha función de manexo de sinal. Se un neno solicitado por pid xa saíu ao momento da chamada (un proceso chamado "zombie"), a función devolve de inmediato. Os recursos do sistema utilizados polo neno son liberados.

O valor do pid pode ser un de:

<-1

o que significa esperar a calquera proceso secundario cuxo ID de grupo de proceso sexa igual ao valor absoluto de pid .

-1

o que significa esperar a calquera proceso infantil; este é o mesmo comportamento que esperan exhibe.

0

o que significa esperar a calquera proceso fillo cuxo ID de grupo de proceso sexa igual ao do proceso de chamada.

> 0

o que significa esperar ao neno cuxo ID de proceso é igual ao valor de pid .

O valor das opcións é un OR de cero ou máis das seguintes constantes:

WNOHANG

o que significa volver inmediatamente se ningún neno saíu.

ENTRADA

o que tamén significa volver para os nenos que están parados e cuxo estado non foi informar.

(Para opcións con só Linux, consulte a continuación.)

Se o estado non é NULL , espere ou espere a información de estado da tenda na localización indicada polo estado .

Este estado pode ser avaliado coas seguintes macros (estas macros toman o buffer estatal (un int ) como argumento --- non un punteiro no buffer!):

WIFEXITED ( estado )

non cero se o neno saía normalmente.

WEXITSTATUS ( estado )

avalía os menos importantes oito bits do código de retorno do neno que finalizou, o que pode ser definido como o argumento para unha chamada para saír () ou como argumento para unha declaración de retorno no programa principal. Esta macro só se pode evaluar se WIFEXITED volveu non cero.

WIFSIGNALED ( estado )

Devolve verdadeiro se o proceso fillo saíu por mor dun sinal que non foi atrapado.

WTERMSIG ( estado )

devolve o número do sinal que provocou que o proceso fose finalizado. Esta macro só se pode evaluar se WIFSIGNALED volveu non cero.

WIFSTOPPED ( estado )

Devolve verdadeiro se o proceso fillo que causou a devolución está actualmente parado; isto só é posible se a chamada foi feita usando WUNTRACED .

WSTOPSIG ( estado )

devolve o número do sinal que causou que o fillo pare. Esta macro só se pode evaluar se WIFSTOPPED volveu non cero.

Algunhas versións de Unix (por exemplo, Linux, Solaris, pero non AIX, SunOS) tamén definen unha macro WCOREDUMP ( estado ) para probar se o proceso secundario despexou o núcleo. Só use isto encerrado en #ifdef WCOREDUMP ... #endif.

Valor de retorno

A ID do proceso do neno que saíu, ou cero se WNOHANG se empregaba e ningún neno estaba dispoñible, ou -1 por erro (caso en que o errno está establecido nun valor axeitado).

Erros

ECHILD

se o proceso especificado en O pid non existe ou non é un neno do proceso de chamada. (Isto pode ocorrer para o propio fillo se a acción para SIGCHLD está configurada en SIG_IGN. Vexa tamén a sección NOTES DE LINUX sobre fíos).

EINVAL

se o argumento de opcións non era válido.

EINTR

se WNOHANG non estaba establecido e un sinal desbloqueado ou un SIGCHLD foi capturado.