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

Contenu supprimé Contenu ajouté
→‎Envoi d'un signal : Changement du titre
Précisions dans l'introduction
Ligne 1 :
{{ébauche}}
<noinclude>{{Programmation C}}</noinclude>
Les signaux permettent une communication, assez sommaire, entre le système et un processus, ou entre différents processus. Cette communication est sommaire, car un ''signal'' ne porte qu'une seule information: son numéro, de type <tt>int</tt>. Un processus peut aussi s'envoyer un signal à lui-même.
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()
Ces signaux sont envoyés de manière ''asynchrone'': lorsqu'un processus reçoit un signal, son exécution est interrompue, et une fonction spécifique, dite ''gestionnaire de signal'', est appelée, avec en paramètre le numéro du signal reçu, pour traiter l'événement. Lorsque cette fonction se termine, le processus reprend là où il s'était arrêté.
*pause()
 
*signal()
C'est à chaque processus de déterminer ce qu'il fait quand il reçoit un signal de numéro donné, en définissant un gestionnaire de signal pour tous les signaux qu'il le souhaite. Vous l'aurez remarqué, dans tous les exemples de ce livre, nous ne nous sommes pas occupés de savoir quels signaux nous pourrions recevoir, et comment il fallait les traiter. En l'absence de précisions dans nos programmes, l'implémentation fournira en effet un gestionnaire de signal par défaut, qui le plus souvent se contentera d'arrêter le programme.
 
Les fonctions suivantes sont utilisées dans la gestion des signaux :
* <tt>signal()</tt> pour définir un gestionnaire de signal;
* <tt>raise()</tt> pour envoyer un signal au processus courant;
* <tt>kill()</tt> pour envoyer un signal à un autre processus (on notera que cette fonction est fournie en extension dans ''Unix System V'' et POSIX, et n'existe pas dans la norme C);
* <tt>pause()</tt> pour attendre un signal (id.).
 
== Envoi d'un signal à un autre processus ==