| | |
wait3, wait4 - Attendre la fin d'un processus
- Style BSD.
#define _USE_BSD#include <sys/types.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.
- ERESTARTSYS
- WNOHANG n'est pas
indiqué, et un signal à intercepter ou SIGCHLD a été reçu. Cette erreur
est renvoyée par l'appel système. La routine de bibliothèque d'interface n'est
pas autorisée à renvoyer ERESTARTSYS, mais renverra EINTR.
SVr4,
POSIX.1
signal(2)
, getrusage(2)
, wait(2)
, signal(7)
Christophe
Blaess, 1997.
Table des matières
© 1996-2000 Adaptation française "Christophe Blaess"
| |