Updated Modifié

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 un os.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 signal SIGUSR1 (respectivement SIGUSR2) avec la fonction os.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).