TP - Programmation répartie (M4102) UE 41
Les signaux.
Les signaux sont un ensemble de procédés implémenté par le système, permettant à celui-ci d'avertir un processus d'un évenement. Ce TP vise à vous familiariser avec ces signaux et leurs usages au travers de quelques exemples. Tous les signaux ne sont pas vus, ni certaines de leurs subtilités (les différents types de masquages par exemple).
Exercice 1 : SIGINT et Ctrl-C.
- Vous devez écrire un programme simple qui affiche le message "Bonjour" toutes les secondes et qui ne s'arrête jamais (vous utiliserez sleep()).
- Vous devrez coder un handler qui devra afficher un message du type « Fin du programme » à la réception du signal SIGINT (généré par le système lorsque l'utilisateur appuie sur Contrôle-C). Le handler finira par un exit().
- Retirer l'instruction exit() du handler et testez.
- Masquer le signal SIGINT pendant 60 secondes puis libérez le. Testez en appuyant sur Ctrl-C durant ces 60 secondes.
Exercice 2 : Zombies et SIGCHLD
Afin de tester la gestion synchrone des zombies vous devez écrire le programme suivant:
1. Création de zombies:
- création de deux fils
- le fils 1 attend x secondes (avec sleep())
- le fils 2 attend y secondes (avec sleep()) et y>x
- le père une fois les deux fils créés boucle indéfiniment.
Observez les zombies avec la commande ps (ps aux).
2. Créez un handler qui intercèpte le signal SIGCHLD (celui-ci est émis au moment de la terminaison d'un fils), gérez les processus zombies (avec waitpid()), puis affichez un message du type "Terminaison du fils de pid xxx". Vérifiez qu'il n'y a effectivement plus de zombies avec la commande ps.
Exercice 3 : Lecture d'un fichier de configuration à chaud (SIGHUP)
Vous allez coder une version extrêmement basique de votre mini-shell. Celui-ci lit un fichier de configuration au moment de son lancement. Ce fichier ne contient qu'une seule ligne qui correspond au prompt qui doit être affiché. Le fichier de configuration pourra s’appeler shell.conf.
Ce que fait votre mini-shell:
- Affichage du prompt sans retour à la ligne
- Lecture de l'entrée standard (read(0,...))
- Affichage de ce qui a été saisie sur l'entrée standard
- retour à l'affichage du prompt
Afin de prendre en compte les modifications qui pourraient être apporté sur ce fichier alors que le mini-shell est en cours d’exécution, il vous faudra recharger ce fichier de configuration à chaque réception du signal SIGHUP. Vous testerez également le signal avec et sans l’option SA_RESTART.
Appels : sigaction(2).
Commandes pour tester : kill(2).