« Programmation C/Gestion des signaux » : différence entre les versions

Contenu supprimé Contenu ajouté
Greudin (discussion | contributions)
m +modele
Greudin (discussion | contributions)
m exemple
Ligne 1 :
{{ébauche}}
<noinclude>{{Programmation C}}</noinclude>
Les signaux informent les processus lors d'évènements comme ferait une sonnerie dans la vie courante. Ces interruptions logicielles se font avec les fonctions (''UNIX System V'') :
*kill()
*pause()
*signal()
 
==Envoi d'un signal==
La bibliothèque "signal.h" nous fournit la primitive kill (PID, signal) pour envoyer un signal :
*PID > 0 : identifiant d'un processus
*PID = 0 : le signal sera envoyé à tous les processus du groupe processus
*PID = -1 : le signal sera envoyé à tous les processus de l'utilisateur. En super-utilisateur (uid=0) tous les processus (sauf système) reçoivent le signal.
 
Par exemple, un processus fils envoie le signal SIGFPE a son père qui a pour fonction d'afficher dix fois le message "Pere\n". Le processus fils enverra le signal SIGFPE (floating point exception) :
kill(0, SIGFPE);
 
<source lang="c">
#include <stdio.h>
#include <signal.h>
 
int main(void)
{
int pid;
int iterations = 10;
 
pid = fork();
 
if ( pid > 0 )
{
while (iterations --) printf("Pere\n");
}
else {
printf("fils\n");
kill(0, SIGFPE);
}
}
</source>
 
Sortie :
$ cc exkill.c -o exkill
greudin@castor:~/dev/dev_c/gestion_des_signaux$ ./exkill
fils
Floating point exception
 
Le processus père n'a pas eu le temps d'afficher le message avant l'exécution du fils que celui ci a généré une exception de virgule flottante.