WAIT(2) Manuel du programmeur Linux WAIT(2)
NOM
wait, waitpid - Attendre la fin d'un processus.
SYNOPSIS
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
pid_t waitpid(pid_t pid, int *status, int options);
DESCRIPTION
La fonction wait 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 "zom
bie"), la fonction revient immédiatement. Toutes les
ressources utilisées par le fils sont libérées.
La fonction waitpid 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 wait.
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, wait et waitpid y stockent
l'information sur la terminaison du fils.
Cette information peut être analysée avec les macros suiv
antes, qui réclament en argument le buffer status (un int,
et non pas un pointeur sur ce buffer).
Linux 9 Avril 1999 1
WAIT(2) Manuel du programmeur Linux WAIT(2)
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 rou
tine 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 nombre de signaux qui ont 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 nombre de signaux qui ont causé l'arrêt
du fils. Cette macro ne peut etre évaluée que si
WIFSTOPPED est non nul.
VALEUR RENVOYÉE
En cas de réussite, le PID du fils qui s'est terminé est
renvoyé, en cas d'echec -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. (Ceci
peut arriver pour son propre fils si l'action de
SIGCHLD est placé sur SIG_IGN).
EINVAL L'argument options est invalide.
ERESTARTSYS
WNOHANG n'est pas indiqué, et un signal à inter
cepter ou SIGCHLD a été reçu. Cette erreur est
renvoyée par l'appel système. La routine de bib
liothèque d'interface n'est pas autorisée à ren
voyer ERESTARTSYS, mais renverra EINTR.
NOTES
Les spécifications Single Unix décrivent un attribut
SA_NOCLDWAIT (absent sous Linux) permettant (lorsqu'il est
positionné) aux processus fils se terminant de ne pas
devenir zombies, comme quand l'action pour SIGCHLD est
fixée à SIG_IGN (ce qui toutefois n'est pas autorisé par
Linux 9 Avril 1999 2
WAIT(2) Manuel du programmeur Linux WAIT(2)
POSIX). Un appel à wait() ou waitpid() bloquera jusqu'à ce
qu'un fils se termine, puis échouera avec errno contenant
ECHILD.
CONFORMITÉ
SVr4, POSIX.1
VOIR AUSSI
signal(2), wait4(2), signal(7)
TRADUCTION
Christophe Blaess, 1997.
Linux 9 Avril 1999 3