17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Principaux modules<br />

CHAPITRE 8<br />

fork() -> PID<br />

Permet de créer un processus enfant. fork() renvoie le PID (Process ID) du nouveau<br />

processus dans le processus père, et 0 dans le processus enfant (non disponible sous<br />

MS-Windows).<br />

Le principe du forking est de créer un deuxième processus qui continue à exécuter la suite<br />

du programme, en parallèle du processus original. Le code doit donc être en mesure de<br />

différencier les deux processus dans la suite du programme. Il peut le faire grâce au retour<br />

de la fonction fork(), qui est différente suivant le processus où l’on se trouve.<br />

L’exemple ci-dessous est un squelette possible de mise en œuvre de fork().<br />

Implémentation de fork() dans un module fork.py<br />

# -*- coding: utf8 -*import<br />

os<br />

import time<br />

import sys<br />

import warnings<br />

child_pid = os.fork()<br />

if child_pid == 0:<br />

# code enfant<br />

print('enfant: je suis le processus enfant')<br />

try:<br />

print('enfant: je travail')<br />

time.sleep(2)<br />

print("enfant: j'ai fini")<br />

except:<br />

# le code du processus enfant<br />

# ne doit pas générer une erreur ici<br />

# qui risquerait de le faire remonter<br />

# et de lui faire exécuter<br />

# du code prévu pour le processus parent<br />

lerr = '%s: %s' % (sys.exc_info()[0], sys.exc_info()[1])<br />

warnings.warn('Erreur dans le processus enfant:\n %s' % lerr)<br />

else:<br />

# code parent<br />

print('pere: je suis le processus pere')<br />

print("pere: j'attends le processus enfant")<br />

os.wait()<br />

print('pere: le processus enfant a terminé')<br />

L’exécution de ce programme entraînera la création de deux processus.<br />

235

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!