os.fork ( )
DESCRIPTION.
Crée un clone parfait du processus actif au moment de l'appel, et qui sera ensuite indépendant.
SYNTAXE.
Variable = os.fork ( )
Variable = ⇨ variable qui recevra la valeur [ optionnel ]
os.fork ( ) ⇨ appel de la méthode [ OBLIGATOIRE ]
REMARQUES.
La méthode os.fork ( ) 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.
La méthode os.fork ( ) doit être exécuté depuis un terminal, ou assimilé, pour être optimale.
La création d'un clone d'un processus sera appréciée, par exemple, pour comparer les différences de comportement si des données sont modifiées dans un processus, sans avoir à relancer ce processus.
L'appel de la méthode os.fork ( ) retourne :
- 0, si c'est l'enfant qui est devenu le processus actif ;
- le PID de l'enfant si c'est le parent qui est le processus actif.
On appelle processus tous programmes en cours d'exécution. Sous UNIX, et donc sous Linux, un processus est identifié par un son PID (Processus IDentifier) sous la forme d'un int ( ) positif, correspondant à son ordre de création de puis le début du lancement de l'os. À chaque processus est également associé l'identifiant de son utilisateur et le PID de son parent (PPID).
Une fois lancé, chargé, vivant, un processus peut être :
- actif, en train d'être exécuté ;
- prêt, chargé mais en attente de son tour de devenir actif ;
- suspendu, endormi, par exemple avec ctrl+Z, mais toujours vivant et il pourra être repris ;
- en sommeil, il est en attente d'un événement pour se poursuivre ;
- en pause, pour une durée indéterminée ou programmée ;
- en attente sur un périphérie d'entrée ou de sortie ;
- zombifié, son exécution est terminée mais il attend le retour de l'état de sortie de son enfant.
L'os choisi parmi tous les processus vivants, et en tenant compte de leur niveau de priorité, celui qui sera exécuté, après un certain temps, très cours, il en choisi un autre et reprend son exécution là où il l'avait stopper, et ainsi de suite.
La fonction fork (fourche, embranchement) fait partie des appels système standard d'UNIX (norme POSIX1). Cette fonction permet à un processus (un programme en cours d'exécution) de donner naissance à un nouveau processus qui est sa copie conforme, par exemple en vue de réaliser un second traitement parallèlement au premier. Un bon moyen de visualiser l'effet d'un fork sur un processus est d'imaginer une division cellulaire.(source : wikipédia).
Il existe une filiation dans les processus : le créateur d'un nouveau processus est appelé le père et le nouveau processus, le fils. La plupart des attributs système du père (par exemple les droits sur le système de fichier) sont transmis au fils, de la même manière que l'héritage. Au démarrage d'un système Unix, un seul processus existe (de numéro 1). Tous les autres processus qui peuvent exister au cours de la vie du système descendent de ce premier processus, appelé init, via des appels système comme fork, vfork, posix_spawn ou d'autres moyens. Sur les premiers UNIX, seul l'appel système fork permet de créer de nouveaux processus.(source : wikipédia).
Voir la méthode os.wait ( ) qui retourne l'état de sortie de processus enfant à son parent.
EXEMPLE.
import os
kparent = os.getpid ( )
kenfant = os.fork ( )
if kenfant > 0 : # 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" , kenfant , "doit compter jusqu'à 5 ..." )
print ( )
os.wait ( )
print ( "Mon enfant" , kenfant , "a fini de compter, je peut accomplir ma tâche ..." )
for klettre in "Python" : print ( "Le PARENT épelle :" , klettre )
print ( )
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 compte :" , kvaleur )
print ( "Travail terminé. Mon parent" , kparent , "va épeler Python ..." )
print ( )
print ( "Identifiant du processus PARENT :" , kparent )
print ( "Identifiant du processus ENFANT :" , kenfant )
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.