Conegueu el comandament de Linux: espera

Nom

espera, waitpid: espereu la terminació del procés

Sinopsi

#include
#include

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

Descripció

La funció d' espera suspèn l'execució del procés actual fins que un fill ha sortit, o fins que es lliuri un senyal l'acció del qual és finalitzar el procés actual o trucar a una funció de tractament de senyals. Si un nen ja ha sortit al moment de la trucada (un procés anomenat "zombie"), la funció torna immediatament. S'alliberen tots els recursos del sistema que utilitza el nen.

La funció waitpid suspèn l'execució del procés actual fins que un fill com s'especifica en l'argument pid ha sortit o fins que es lliura un senyal l'acció del qual és finalitzar el procés actual o trucar a una funció de control de senyals. Si un nen sol·licitat per pid ja ha sortit en el moment de la trucada (un procés anomenat "zombie"), la funció torna immediatament. S'alliberen tots els recursos del sistema que utilitza el nen.

El valor del pid pot ser un dels següents:

<-1

el que significa esperar a qualsevol procés secundari el ID del grup de procés sigui igual al valor absolut de pid .

-1

que significa esperar un procés secundari; aquest és el mateix comportament que esperen les exhibicions.

0

el que significa esperar a qualsevol procés secundari el ID del grup de processos sigui igual al del procés de trucada.

> 0

que significa esperar al fill el ID del procés sigui igual al valor del pid .

El valor de les opcions és un OR de zero o més de les següents constants:

WNOHANG

que vol dir tornar immediatament si cap fill ha sortit.

ENTRADA

el que significa també retornar als nens que es van aturar, i l'estat del qual no s'ha informat.

(Per a opcions només per a Linux, vegeu a continuació.)

Si l' estat no és NULL , espereu o espereu que emmagatzemeu la informació d'estat a la ubicació indicada per l' estat .

Aquest estat es pot avaluar amb les següents macros (aquestes macros prenen el buffer d'estat (un int ) com un argument --- no un punter al buffer!):

WIFEXITED ( estat )

No és nul si el nen surt normalment.

WEXITSTATUS ( estat )

avalua els vuit bits menys significatius del codi de retorn del fill que ha finalitzat, que pot haver estat establert com l'argument a una crida a la sortida () o com a argument d'una declaració de retorn al programa principal. Aquesta macro només es pot avaluar si WIFEXITED va tornar sense zero.

WIFSIGNALED ( estat )

retorna true si el procés fill va sortir a causa d'un senyal que no va ser capturat.

WTERMSIG ( estat )

torna el nombre del senyal que va provocar que el procés secundari finalitzi. Aquesta macro només es pot avaluar si WIFSIGNALED va tornar sense zero.

WIFSTOPPED ( estat )

retorna true si el procés secundari que va provocar la devolució es deté actualment; això només és possible si la trucada s'ha fet usant WUNTRACED .

WSTOPSIG ( estat )

retorna el nombre del senyal que va provocar que el nen s'aturés. Aquesta macro només es pot avaluar si WIFSTOPPED ha retornat sense zero.

Algunes versions d'Unix (per exemple, Linux, Solaris, però no AIX, SunOS) també defineixen una macro WCOREDUMP ( estat ) per comprovar si el procés secundari va abocar el nucli. Utilitzeu aquesta opció només a #ifdef WCOREDUMP ... #endif.

Valor retornat

L'ID del procés del nen que va sortir, o zero si WNOHANG es va utilitzar i no hi havia cap fill disponible, o -1 per error (en aquest cas, errno està establert en un valor apropiat).

Errors

ECHILD

si el procés especificat a pid no existeix o no és un nen del procés de trucada. (Això pot passar per un fill propi si l'acció de SIGCHLD està establerta en SIG_IGN. Vegeu també la secció NOTES DE LINUX sobre els subprocessos).

EINVAL

si l'argument d' opcions no era vàlid.

EINTR

si WNOHANG no es va establir i es va aturar un senyal desbloquejat o un SIGCHLD .