man wait4 (Appels systèmes) - Attendre la fin d'un processus - Style BSD.

NOM

wait3, wait4 - Attendre la fin d'un processus - Style BSD.

SYNOPSIS

#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>

pid_t wait3(int *status, int options,
      struct rusage *rusage);

pid_t wait4(pid_t pid, int *status, int options,
      struct rusage *rusage);

DESCRIPTION

La fonction wait3 suspend l'exécution du processus courant jusqu'à ce qu'un enfant se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si un processus fils s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.

La fonction wait4 suspend l'exécution du processus courant jusqu'à ce que le processus fils numéro pid se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Si le fils mentionné par pid s'est déjà terminé au moment de l'appel (il est devenu "zombie"), la fonction revient immédiatement. Toutes les ressources utilisées par le fils sont libérées.

La valeur de pid peut également être l'une des suivantes :

< -1
attendre la fin de n'importe quel processus fils appartenant à un groupe de processus d'ID pid.
-1
attendre la fin de n'importe quel fils. C'est le même comportement que wait3.
0
attendre la fin de n'importe quel processus fils du même groupe que l'appelant.
> 0
attendre la fin du processus numéro pid.

La valeur de l'argument option options est un OU binaire entre les constantes suivantes :

WNOHANG
ne pas bloquer si aucun fils ne s'est terminé.
WUNTRACED
recevoir l'information concernant également les fils bloqués si on ne l'a pas encore reçue.

Si status est non NULL, wait3 et wait4 y stockent l'information sur la terminaison du fils.

Cette information peut être analysée avec les macros suivantes, qui prennent en argument le buffer status (un int et non pas un pointeur sur le buffer).

WIFEXITED(status)
non nul si le fils s'est terminé normalement
WEXITSTATUS(status)
donne le code de retour tel qu'il a été mentionné dans l'appel exit() ou dans le return de la routine main. Cette macro ne peut être évaluée que si WIFEXITED est non nul.
WIFSIGNALED(status)
indique que le fils s'est terminé à cause d'un signal non intercepté.
WTERMSIG(status)
donne le numéro du signal qui a causé la fin du fils. Cette macro ne peut être évaluée que si WIFSIGNALED est non nul.
WIFSTOPPED(status)
indique que le fils est actuellement arrêté. Cette macro n'a de sens que si l'on a effectué l'appel avec l'option WUNTRACED.
WSTOPSIG(status)
donne le numéro du signal qui a causé l'arrêt du fils. Cette macro ne peut être évaluée que si WIFSTOPPED est non nul.

Si rusage n'est pas NULL, La structure rusage définie dans <sys/resource.h> sera remplie avec les informations de comptabilité. Voir getrusage(2) Pour plus de détails.

VALEUR RENVOYÉE

En cas de réussite, le PID du fils qui s'est terminé est renvoyé, en cas d'échec -1 est renvoyé et errno contient le code d'erreur.

ERREURS

ECHILD
Le processus indiqué par pid n'existe pas, ou n'est pas un fils du processus appelant.
EINTR
WNOHANG n'est pas indiqué, et un signal à intercepter ou SIGCHLD a été reçu.

NOTE

L'inclusion de <sys/time.h> n'est plus obligatoire, mais améliore la portabilité. (En fait, <sys/resource.h> définit la structure rusage qui contient des champs de type struct timeval définis dans <sys/time.h>).

Les prototypes de ces fonctions ne sont disponibles que si la constante _BSD_SOURCE est définie (soit explicitement, ou implicitement en ne définissant par _POSIX_SOURCE ou en compilant avec l'option -ansi).

CONFORMITÉ

SVr4, POSIX.1

VOIR AUSSI

TRADUCTION

Christophe Blaess, 1996-2003.

CETTE PAGE DOCUMENTE AUSSI :