Université Pierre et Marie Curie Master 2016 2017
PR : Travaux Dirigés 3. Signaux et processus

Cette séance étudie les signaux standards d’Unix.



1 Chaîne de processus

A l’aide de la fonction fork, ecrire un programme qui crée une chaîne de processus telle que le processus initial (celui du main) crée un processus qui à son tour en crée un second et ainsi de suite jusqu’à la création de N processus (en plus du processus initial). Au moment de sa création, le dernier processus de la chaîne affiche le Pid de tous les autres processus y compris celui du processus initial. Chacun des autres processus attend la terminaison de son fils, puis affiche son propre Pid (à l’aide de getpid), celui de son père (à l’aide de getppid) et celui de son fils avant de se terminer.

On souhaite de plus que le dernier processus créé génère une valeur aléatoire entre 0 et 100. Pour générer cette valeur aléatoire utilisez :

(int)(rand () /(((double) RAND_MAX +1) /100))

Ecrire le programme de sorte que le processus initial affiche cette valeur aléatoire avant de se terminer

Exemple d'appel :
$PWD/bin/chaine_proc 10
Fichier à créer : src/chaine_proc.c

2 La fonction kill

On reprend l’exercice précédent, mais on s’interdit d’utiliser les fonctions wait et assimilées, ni bien sûr le signal SIGCHLD. A la place on utilisera les fonctions kill, sigaction et sigsuspend. Comment résoudre alors le problème en s’assurant qu’aucun processus ne se termine avant que tous les autres ne soient créées ?

Remarque : on ne demande plus de récupérer la valeur aléatoire ici.

Exemple d'appel :
$PWD/bin/kill_proc 10
Fichier à créer : src/kill_proc.c

3 Les Signaux SIGSTOP, SIGCONT, SIGCHLD

On reprend encore le même exercice, mais nous voulons que tous les processus, à l’exception du processus initial, soient suspendus par un signal SIGSTOP. Lorsqu’ils le sont tous, le processus initial affiche : Tous les descendants sont suspendus. L’exécution de ces processus doit alors reprendre pour que ceux-ci se terminent. De nouveau, il faut répondre sans utiliser les fonctions de la famille wait.

Exemple d'appel :
$PWD/bin/stop_and_go 10
Fichier à créer : src/stop_and_go.c

4 Annexes


makefile