#include <signal.h> // <csignal> en C++
int raise( int signalId );
Cette fonction permet de déclencher un signal pour le processus courant, ce signal pouvant être intercepté grâce à la fonction signal
.
La librairie C ISO spécifie les signaux suivants
Nom du signal | Signification | Description |
---|---|---|
SIGABRT | Signal Abort | Terminaison anormale, normalement initiée par la fonction abort |
SIGFPE | Signal Floating-Point Exception | Opération arithmétique erronée, telle que division du zéro ou opération entraînant un dépassement de capacité. Attention, ce signal peut aussi déclencher suite à des manipulation de valeur numérique sans virgule flottante. |
SIGILL | Signal Illegal Instruction | Exécution d'une instruction non conforme. Cela est généralement dû à une corruption du code ou à une tentative d'exécution de données. |
SIGINT | Signal Interrupt | Un signal d'interruption généralement généré par l'utilisateur de l'application. |
SIGSEGV | Signal Segmentation Violation | Accès à un segment de mémoire virtuelle non mappé en mémoire physique ou tentative de modification d'un segment de mémoire configuré en lecture seule. |
SIGTERM | Signal Terminate | Signal de demande de terminaison du programme. |
En complément chaque système d'exploitation compatible POSIX peut définir ses propres signaux.
$> kill -l
signalId : l'identifiant du signal à déclencher. Il est conseillé d'utiliser les constantes associées au signaux en lieu et place de leurs
valeurs numérique (Ex: SIGTERM
, SIGCONT
, ...).
Si le signal est correctement déclenché, la valeur 0
sera retournée.
Dans le cas contraire une valeur non nulle vous sera renvoyée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <signal.h> #include <stdio.h> #include <stdlib.h> // Le gestionnaire de signal de type SIGTERM void sigTerm( int code ) { fprintf( stderr, ">>> SIGTERM received [%d]\n", code ); } int main(void) { // On enregistre un gestionnaire pour le signal SIGTERM. signal( SIGTERM, &sigTerm ); // On déclenche le signal. raise( SIGTERM ); // On termine l'exécution du main. printf( "Exit main\n" ); return EXIT_SUCCESS; } |
Et voici le résultat produit par cet exemple.
$> gcc -o sample sample.c $> ./sample >>> SIGTERM received [15] Exit main $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :