Cours:TdProgSyst

De troyesGEII
Révision datée du 14 décembre 2015 à 09:31 par Bjacquot (discussion | contributions) (Page créée avec « =={{Bleu|Td 12}} Eléments de programmation système== === Gestion des signaux === ------------------- Deux fonctions du langage C permettent de tr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Td 12 Eléments de programmation système

Gestion des signaux


Deux fonctions du langage C permettent de travailler avec les signaux d’UNIX: la fonction **kill** et **signal**. La première permet d’envoyer un signal à un processus dont on connait le numéro de processus (le PID), et


la fonction signal permet d’associer une fonction écrite par l’utilisateur à un signal UNIX: lorsque ce dernier est reçu, la fonction est exécutée.

Les signaux les plus classiques sont les suivants:

  SIGINT   signal envoyé par UNIX lors d’un Ctrl C pour stopper le processus
  SIGHUP   signal émis par UNIX lors de la déconnexion
  SIGALRM  signal émis par la fonction alarm()
  SIGUSR1  signal à la disposition de l’utilisateur
  SIGUSR2  autre signal à la disposition de l’utilisateur

Un exemple d’utilisation de ces fonctions est représenté ci-dessous:

   #include <stdio.h>
   #include <sys/types.h>
   #include <signal.h>
   void gestion_signal() {
   ...                               // code de gestion du signal
   }
   main() {
   ...
   signal(SIGUSR1,gestion_signal);   // qd on reçoit SIGUSR1, exécute gestion_signal()
   ...
   }

Chaque fois que le processus recevra le signal SIGUSR1, on ira exécuter la fonction gestion_signal. Pour ceux qui connaissent le concept d’ interruption, il s’agit ici d’une interruption logicielle.

La fonction alarm permet à un processus de s’auto-envoyer le signal SIGALRM au bout d’une certaine temporisation exprimée en secondes.

Exercices

1. Ecrire un programme ignorant les arrêts claviers (CTRL+C, ...).

2. Ecrire un programme ignorant le signal émis lors de la déconnexion.

3. Ecrire un programme affichant toutes les dix secondes la chaîne de

   caractères "coucou" sur l’écran.

4. Ecrire un programme permettant d’afficher le numéro des signaux

   reçus par le programme.