os.waitid ( )
DESCRIPTION.
Met l'exécution d'un processus en pause tant qu'un ou plusieurs autres processus sont vivants.
SYNTAXE.
TPL_Variable = os.waitid ( stoppes , processus , options )
TPL_Variable = ⇨ variable qui recevra le tuple à champs nommés [ optionnel ]
os.waitid ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
stoppes ⇨ descripteur du fichier [ OBLIGATOIRE ]
processus ⇨ liste des objets tampons [ OBLIGATOIRE ]
options ⇨ liste des objets tampons [ OBLIGATOIRE ]
REMARQUES.
stoppes doit être l'une des valeurs suivantes :
- P_ALL, tous les processus sont en attente sauf processus ;
- P_PIDFD, le processus associé au descripteur de fichier est en attente ;
- P_PGID, tous les processus du groupe associé à processus sont en attente ;
- P_PID, seul processus parent de processus est en attente.
processus doit être un int ( ) correspondant au PID (Process IDentifier) du processus donc le ou les processus définit dans stoppes attendent la fin de l'exécution.
options précise le signal de sortie attendu du processus enfant, ce doit être l'une des valeurs suivantes, ou une combinaison d'eux séparés par l'opérateur or, ou le symbole | : os.WCONTINUED ; os.WEXITED ; os.WNOHANG ; os.WNOWAIT ou os.WSTOPPED.
La méthode os.waitid ( ) n'est disponible que pour UNIX et la plupart des Linux. Son utilisation sous d'autres OS, tel que Windows de Microsoft, lèvera une exception.
L'appel de la méthode os.waitid ( ) ne peut être passée que depuis un processus parent, c'est-à-dire qui a créé un processus enfant avec la méthode os.fork ( ). Si le processus parent comporte l'appel de la méthode os.waitid ( ) il suspendra l'exécution des processus compris dans stoppes, tant qu'il n'aura pas reçu la valeur de retour de fin, correspondant à options s'il est présent, indiquant que son processus enfant est complété.
La valeur retournée par le processus enfant, à sa sortie, est :
- None, si options valait os.WNOHANG ou si aucun processus enfant n'est en attente ;
- un objet de type siginfo_s contenant les valeurs de :
- si_pid, l'identifiant du processus enfant ;
- si_uid, l'identifiant du processus réel générateur du signal de sortie ;
- si_signo, le numéro du signal en cours de délivrance ;
- si_status, valeur de sortie ou signal pour la fin du processus ;
- si_code, code de signalisation de sortie pouvant être :
- os.CLD_CONTINUED, le processus enfant arrêté a continué ;
- os.CLD_DUMPED, le processus enfant ne s'est terminée normalement et à créé un fichier principal ;
- os.CLD_EXITED, le processus enfant s'est terminé ;
- os.CLD_KILLED, le processus enfant ne s'est terminée normalement sans créé de fichier principal ;
- os.CLD_STOPPED, le processus enfant c'est arrêté ;
- os.CLD_TRAPPED, le processus enfant a été capturé.
EXEMPLE.
import os
kparent = os.P_PID
kenfant = os.fork ( )
if kenfant : # si le processus en cours n'a pas retourné 0 c'est le père qui été chargé dans le CPU
print ( "Le PARENT" , os.getpid ( ) , "est en cours ... " )
print ( "Je patiente, mon enfant exécute sa tache ..." )
print ( )
kretour = os.waitid ( kparent , kenfant , os.WEXITED )
print ( "Mon enfant s'est terminé ... " )
print ( "Il a retourné la valeur :" , kretour )
print ( "Le PARENT" , os.getpid ( ) , ": Ce processus est terminé ... " )
else : # si le processus en cours a retourné 0 c'est le fils qui été chargé dans le CPU
print ( "L'ENFANT" , os.getpid ( ) , "travail ..." )
for kvaleur in range ( 6 ) : print ( "L'ENFANT" , os.getpid ( ) , ": C'est toujours les mêmes qui travaillent ..." )
print ( )
Une fois enregistré, ce script doit être lancé depuis un terminal Linux avec la commande :
python /chemin/monscrip.py (où /chemin/monscrip.py est le nom de votre script avec son chemin).
Pour une meilleur compatibilité, chemin et nom de doivent as comporter d'espace ou de caractères spéciaux.
Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de
Dans la LOGITHEQUE de MON PYTHON PAS A PAS
vous trouvez des suggestions de projets simples et classiques pour
ooo
TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER
ooo
la programmation récréative avec le langage PYTHON 3
avec un exemple de résolution à télécharger pour vous inspirer.