Écrire un programme qui boucle tout en affichant ctrl-c
lorsque le processus
qui l’exécute reçoit le signal SIGINT
.
Dans un second temps on fera en sorte que seul le premier signal SIGINT
soit traité.
Essayez à la main, puis regardez le flag SA_RESETHAND
Écrire une commande recevoir-signaux
qui affiche son pid puis boucle tout en
affichant en les numérotant (dénombrant) les signaux que son processus reçoit.
Tester cette commande en utilisant la commande unix kill
.
Écrire une commande emettre-signaux pid-cible k s1 s2 ... sn
qui émet à
destination du processus cible k
fois la séquence de signaux donnée en
paramètre.
Utiliser cette commande pour “bombarder” de signaux un processus exécutant la commande de l’exercice précédent.
Il s’agit maintenant de faire dialoguer un père et son fils à l’aide de
signaux. Pour cela on va écrire une commande signaux-pere-fils k s1 s2 ... sn
où le fils va émettre vers son père k
fois la séquence de signaux donnée en
paramètre. On utilisera le signal KILL pour terminer le dialogue.
Afin de ne pas perdre de signaux on va mettre en œuvre le protocole suivant : le père devra envoyer au fils le signal USR1 pour acquitter chaque réception, de son coté le fils devra attendre l’acquittement du père pour poursuivre l’émission.
timeout <delai> <cmd> [args]
Écrire une commande timeout
telle qu’elle exécute la commande puis la termine en
envoyant SIGTERM
s’il elle ne complète pas avant delai
.
Ce programme retourne le code d’erreur de la commande si tout va bien et 124 si
la commande a du être tuée.
Cet exercice a pour but de réaliser une communication utilisant le code morse (ou un quelconque code similaire) entre deux processus — un client et un serveur — au moyen de signaux. Un résumé du codage morse est disponible dans le fichier morse.txt. Pour information, il faut y ajouter les particularités suivantes:
Écrivez un programme qui boucle infiniment et affiche :
.
lorsqu’il reçoit un signal SIGUSR1
;-
lorsqu’il reçoit un signal SIGUSR2
;SIGALRM
.Vous utiliserez la fonction sigaction
pour gérer la mise en place des gestionnaires (handler) de signaux. Vous pourrez utiliser la commande kill
pour envoyer des signaux au processus depuis un terminal.
Rajoutez à la terminaison (SIGINT
) le message "[over]"
avant de terminer.
Écrire le programme qui envoie un message …