Signaux

On poura dans un premier temps faire un court programme perl qui définit un signal handler pour chaque signal, qui affiche le nom du signal reçu et tester ce programme en lui envoyant des signaux avec la commande kill. Utiliser man perlipc.
NB : la liste des signaux est obtenue par la commande kill -l. Les signaux KILL et STOP ne peuvent avoir de signal handler.

  1. On cherche à établir un protocole de communication entre deux processus A et B (lancés par un fork) par des signaux. Définir un protocole dans lequel B peut émettre un accusé de réception à chaque signal. Faire le programme en Perl.
    [corrigé]

  2. Faire un programme C qui fabrique une instance aléatoire du problème du "sac à dos" modulo 232 et qui cherche à la résoudre par recherche exhaustive.
    Le programme engrendre dans un premier temps 33 nombres s, p1, ..., p32 de 32 bits de manière pseudo-aléatoire. Une solution du problème est un sous-ensemble I de {1,...,32} tel que la somme modulo 232 des pi pour i dans I est égale à s.

    Une telle recherche est assez longue. On cherche à pouvoir la lancer en arrière plan, tout en pouvant continuer à dialoguer avec le processus. On cherche essentiellement à lui transmettre plusieurs messages différents:

    1. afficher ou la recherche en est (message STATUS),
    2. abandonner la recherche et recommencer avec une autre instance (message RESTART),
    3. abandonner définitivement (message STOP),
    4. demander l'affichage des sous-ensembles I qui seraient des solutions modulo 2n (message DISP n).
    Définir un protocole de signaux pour coder ces messages avec les signaux SIGUSR1 et SIGUSR2, et faire une application Perl qui envoie ce type de message à un processus donné.
    [corrigé recherche en C, lanceur de message en Perl]