Jar Jar Intaigriste | Si tu veux, je recopie la page de man :
Code :
- 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).
- 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 être évaluée que si
- WIFSTOPPED est non nul.
- Certaines versions d'Unix (Linux, Solaris, mais pas AIX ou
- SunOS) définissent aussi une macro WCOREDUMP(status) Pour
- vérifier si le processus fils a créé un fichier core.
- N'utilisez ceci qu'encadré par #ifdef WCOREDUMP ...
- #endif.
- 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. Si WNOHANG a été employé et qu'aucun
- fils ne s'est terminé, zéro est renvoyé.
- 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, voir également le
- passage de la section NOTES concernant les
- threads).
- 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
- POSIX). Un appel à wait() ou waitpid() bloquera jusqu'à ce
- qu'un fils se termine, puis échouera avec errno contenant
- ECHILD.
- Dans le noyau Linux, un thread ordonnancé par le noyau
- n'est pas différent d'un simple processus. En fait, un
- thread est juste un processus qui est créé à l'aide de la
- routine - spécifique Linux - clone(2). Les routines porta
- bles, comme pthread_create(3) sont implémentées en
- appelant clone(2). Ainsi, si deux threads A et B sont
- frères, alors le thread A ne peut pas se mettre en attente
- sur un processus créé par le thread B ou ses descendants,
- car un oncle ne peut pas attendre un neveu. Sur d'autre
- systèmes Unix, où de multiples threads sont implémentés au
- sein d'un unique processus, le thread A peut naturellement
- attendre la fin de n'importe quel processus lancé par un
- thread frère B. Pour qu'un programme qui se base sur ce
- comportement fonctionne sous Linux, il faudra en modifier
- le code.
- CONFORMITÉ
- SVr4, POSIX.1
- VOIR AUSSI
- clone(2), signal(2), wait4(2), pthread_create(3), sig
- nal(7)
- TRADUCTION
- Christophe Blaess, 1997.
|
|