Signaux & processus

Les signaux

Un signal traduit l’apparition d’un événement asynchrone à l’exécution d’un processus. Il peut être généré par :

  • Le noyau (par exemple, si un processus accède une zone mémoire non autorisée – signal SIGSEGV)
  • Un appel système kill qui permet d’envoyer un signal vers un processus identifié par son pid.
  • Le processus lui même (par exemple, un processus initialise une alarme (appel alarm) et lorsque que cette alarme expire, le noyau lui envoie le signal SIGALRM).
  • La frappe d’une touche par l’utilisateur du terminal (par exemple [CTRL-C] génère le signal SIGINT dont l’action par défaut est de terminer le processus).

Contrôle des signaux

A chaque signal est associé un pointeur vers une fonction qui est appelée lors de l’activation du signal. Il est possible de modifier le pointeur de cette fonction sauf pour les signaux SIGKILL et SIGSTOP, Trois comportements sont possibles dans la gestion des signaux :

  • c’est la fonction par défaut du Kernel qui traite le signal.
  • l’utilisateur fournit une fonction pour traiter le signal.
  • l’activation du signal est ignorée.

Type de signaux

Pour le programmeur un signal est représenté dans le système par un nom de la forme SIGXXX.

Signaux provoqués par une exception matérielle

Posix précise que le comportement d’un programme qui ignore les signaux d’erreur du type SIGFPE, SIGILL,SIGSEGV, SIGBUS est indéfini.

  • SIGFPE Floating-point exception : envoyé lors d’un problème avec une opération en virgule flottante mais il est aussi utilisé pour l’erreur de division entière par zéro. L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core. Ce fichier est alors utilisé par l’outil de « debugger » gdb.
  • SIGILL Illegal instruction : envoyé au processus qui tente d’exécuter une instruction illégale. Ceci ne doit jamais se produire dans un programme normal mais il se peut que le fichier exécutable soit corrompu ( erreur lors du chargement en mémoire). L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core.
  • SIGSEV Segmentation violation : envoyé lors d’un adressage mémoire invalide (emploi d’un pointeur mal initialisé). L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core.
  • SIGBUS Bus error : envoyé lors d’une erreur d’alignement des adresses sur le bus. L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core.
  • SIGTRAP Trace trap : envoyé après chaque instruction, il est utilisé par les programmes de mise au point (debug). L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core.

Signaux de terminaison ou d’interruption de processus

  • SIGHUP Hangup : envoyé à tous les processus attachés à un terminal lorsque celui-ci est déconnecté du système. Il est courant d’envoyer le signal à certains processus démons afin de leur demander de se réinitialiser. L’action par défaut est la mise à mort du processus.
  • SIGINT Interrupt : le plus souvent déclenché par [CTRL-C]. L’action par défaut est la mise à mort du processus.
  • SIGQUIT Quit : similaire à SIGINT mais pour [CTRL] [\]. L’action par défaut est la mise à mort du processus en créant un fichier d’image mémoire core.
  • SIGIOT I/O trap instruction : émis en cas de problème hardware (I/O). ‡ core
  • SIGABRT Abort : Arrêt immédiat du processus (erreur matérielle). ‡ core
  • SIGKILL Kill : utilisé pour arrêter l’exécution d’un processus. L’action par défaut est non modifiable.
  • SIGTERM Software termination : C’est le signal qui par défaut est envoyé par la commande kill. L’action par défaut est la mise à mort du processus.

Signaux utilisateurs

  • SIGUSR1 User defined signal 1 : Définie par le programmeur. L’action par défaut est la mise à mort du processus.
  • SIGUSR2 User defined signal 2 : idem que SIGUSR1 .

Signal généré pour un tube

  • SIGPIPE Signal d’erreur d’écriture dans un tube sans processus lecteur. L’action par défaut est la mise à mort du processus.

Signaux liés au contrôle d’activité

  • SIGCLD Signal envoyé au processus parent lorsque les processus fils terminent. Aucune action par défaut.
  • SIGCONT L’action par défaut est de reprendre l’exécution du processus s’il est stoppé. Aucune action si le processus n’est pas stoppé.
  • SIGSTOP Suspension du processus. L’action par défaut est la suspension ( !! non modifiable).
  • SIGTSTP Emission à partir d’un terminal du signal de suspension [CTRL-Z]. Ce signal à le même effet que SIGSTOP mais celui-ci peut être capturé ou ignoré. L’action par défaut est la suspension.
  • SIGTTIN Est émis par le terminal en direction d’un processus en arrière-plan qui essaie de lire sur le terminal. L’action par défaut est la suspension.
  • SIGTTOU Est émis par le terminal en direction d’un processus en arrière-plan qui essaie d’écrire sur le terminal. L’action par défaut est la suspension.

Signal lié à la gestion des alarmes

  • SIGALRM Alarm clock : généré lors de la mise en route du système d’alarme par l’appel système alarm().
Print Friendly, PDF & Email