Page suivante Page précédente Table des matières

12. Signaux

12.1 signal()

#include <stdio.h>
void (*signal(int signum, void (*handler)(int)))(int);

La fonction signal() demande au système de lancer la fonction handler lorsque le signal signum est reçu par le processus courant. La fonction signal() renvoie la fonction qui était précédemment associée au même signal.

Il y a une trentaine de signaux différents,

La liste complète des signaux, leur signification et leur comportement sont décrits dans la page de manuel signal (chapitre 7 pour Linux).
parmi lesquels

La fonction handler() prend en paramètre le numéro du signal reçu, et ne renvoie rien.

Exemple :


 
  1     /* sig.c */

  2     #include <stdlib.h>
  3     #include <signal.h>
  4     #include <errno.h>
  5     #include <unistd.h>
  6     #include <stdio.h>

  7     void traitement(int signum)
  8     {
  9             printf("Signal %d => ", signum);
 10             switch (signum) {
 11             case SIGTSTP:
 12                     printf("Je m'endors....\n");
 13                     kill(getpid(), SIGSTOP);        /* auto-endormissement */
 14                     printf("Je me réveille !\n");
 15                     signal(SIGTSTP, traitement);    /* repositionnement */
 16                     break;
 17             case SIGINT:
 18             case SIGTERM:
 19                     printf("Fin du programme.\n");
 20                     exit(EXIT_SUCCESS);
 21                     break;
 22             };
 23     }

 24     int main(void)
 25     {
 26             signal(SIGTSTP, traitement);    /* si on reçoit contrôle-Z */
 27             signal(SIGINT, traitement);     /* si contrôle-C */
 28             signal(SIGTERM, traitement);    /* si kill processus */

 29             while (1) {
 30                     sleep(1);
 31                     printf(".");
 32                     fflush(stdout);
 33             };
 34             printf("fin\n");
 35             exit(EXIT_SUCCESS);
 36     }
 

12.2 kill()

#include <unistd.h>
int kill(pid_t pid, int sig);

La fonction kill() envoie un signal à un processus.

12.3 alarm()

#include <unistd.h>
long alarm(long delai);

La fonction alarm() demande au système d'envoyer un signal SIGALRM au processus dans un délai fixé (en secondes). Si une alarme était déjà positionnée, elle est remplacée. Un délai nul supprime l'alarme existante.

12.4 pause()

La fonction pause() bloque le processus courant jusqu'à ce qu'il reçoive un signal.

#include<unistd.h>
int pause(void);

Exercice : Écrire une fonction équivalente à sleep().


Page suivante Page précédente Table des matières