Tp n°6 : communication et synchronisation (les signaux) - té

Projet DVD-MIAGE 2010 : TP n°6 - Communication et synchronisation avec les signaux

Ce TP vise à maîtriser l'envoi et la réception de signaux entre processus sous Unix.

Travail à effectuer

À travers cet exercice, vous devrez appliquer les concepts de manipulation des signaux en utilisant les fonctions signal() et kill() présentées dans le cours et le manuel.

Exercice 1 : Réception du signal SIGINT

Écrivez le programme suivant et exécutez-le. Le signal SIGINT correspond à l'interruption du terminal (CTRL+C). Par défaut, il provoque la terminaison du processus.

#include <stdio.h>#include <signal.h>void handINT(int signo) {signal(SIGINT, handINT);printf("Réception d'un signal SIGINT\n");}int main() {signal(SIGINT, handINT);printf("Processus : %d\n", getpid());while (1) {}return 0;}

Exercice 2 : Réaction aux signaux SIGUSR1 et SIGUSR2

Développez un programme C en boucle infinie qui affiche « BONJOUR » à la réception du signal SIGUSR1 et « BONSOIR » à chaque réception du signal SIGUSR2. Attention : l'action par défaut de ces signaux est la terminaison du processus.

Indice : Utilisez la fonction pause() pour attendre les signaux.

Exercice 3 : Communication entre processus père et fils

Créez un programme où un processus père initialise un gestionnaire (handler) pour afficher « BONJOUR » lors de la réception du signal SIGUSR1. Le processus fils doit afficher des informations à l'écran, puis envoyer le signal SIGUSR1 à son père avant de se terminer.

Attention : Assurez-vous que le processus fils se termine avant le processus père.

FAQ

1. Comment vérifier les signaux disponibles sous Unix ?

Consultez la page de manuel signal(7) ou utilisez la commande kill -l dans un terminal pour lister les signaux.

2. Pourquoi le processus ne répond pas aux signaux SIGUSR1/SIGUSR2 ?

Vérifiez que le gestionnaire est correctement installé avec signal() et que le processus n'est pas bloqué par une autre opération. Ces signaux ont une action par défaut de terminaison, qu'il faut désactiver.

3. Comment envoyer un signal à un processus spécifique ?

Utilisez la fonction kill() avec l'ID du processus (obtenu via getpid() ou getppid()) et le numéro du signal. Exemple : kill(pid, SIGUSR1).

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne