Linux |
CentOS 4.8 |
|
wait3(2) |
wait3, wait4 − Attendre la fin d’un processus − Style BSD. |
#define _USE_BSD #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); |
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 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 ê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. |
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. |
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. |
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>). |
SVr4, POSIX.1 |
signal(2), getrusage(2), wait(2), signal(7) |
Christophe Blaess, 1997. |
wait3(2) |