Le but de cette séance est d’étudier les différents modes de communication inter-processus.
1. Signaux
1.1. Exemples
Reprendre les deux exemples du cours. Rapporter les différents scénarios possibles.
Modifier le second exemple afin que l’appui sur Ctrl-C
annule la
mise en temporisation.
1.2. Communication Inter-Processus 1
Reprendre le programme du TP précédent et le
modifier afin que les enfants qui ont obtenu un nb
supérieur à 5
envoie un signal SIGUSR1
à son parent avant de dormir.
Le parent affiche le nombre de signaux SIGUSR1
reçus.
2. Tubes
2.1. Exemple
Reprendre l’exemple du cours. Obtenez-vous toujours la même exécution (ie le même affichage) ? Tester sans la ligne indiquée à enlever. Expliquer.
2.2. Modification
Modifier le programme précédent pour avoir deux enfants, et que le parent alterne l’envoi des lettres entre les deux enfants.
Obtenez-vous toujours la même exécution (ie le même affichage) ?
3. Groupe de Travail 1
3.1. Deux Enfants
Modifier les temps de sommeil de la manière suivante :
- parent : supprimer le
os.sleep(1)
- enfants : remplacer le
os.sleep(3)
par unos.sleep(randrange(4))
Chaque enfant signale au parent, dès qu’il a fini ce sommeil aléatoire, qu’il est disponible en envoyant un signalSIGUSR1
(respectivementSIGUSR2
) avec la fonctionos.kill(pid,sig)
.
Dès que l’un des enfants est disponible, le parent lui envoie un caractère.
3.2. Fiabilité
Compléter le programme précédent avec la fonctionnalité suivante : si l’un des enfants n’envoie aucun signal pendant 5 secondes, on considère qu’il est bloqué et on crée un nouvel enfant pour le remplacer.
Tester en envoyant des SIGINT
aux enfants,
manuellement puis en utilisant un troisième processus enfant, qui les enverra de manière aléatoire (choix de l’enfant et temporisation).