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.