- Code: Tout sélectionner
#!/usr/bin/perl -w
#lancé sans argument sur le signal sigterm
#sigterm -> crée chrono.
#sigint -> diffusion signal a tou les chronometres -> affichage des sec.
#sigquit -> diffusion des arrets
my @tab_chrono;
sub launch_chrono
{
my $pid=fork;
if($pid==0)
{
exec "/usr/bin/perl -w chrono.pl";
}
else
{
#$tab_chrono[$#tab_chrono+1]=$pid;
push @tab_chrono,$pid;
#wait;
}
}
sub killed
{
print "on arrete le proc @tab_chrono";
kill 3, @tab_chrono;
exit 1;
}
sub affiche
{
kill 2, @tab_chrono;
}
$SIG {"TERM"} = "launch_chrono"; #on associe la fct handler au signal SIGALRM(14)
$SIG {"INT"} = "affiche"; # idem pour le signal SIGINT (2)
$SIG {"QUIT"} = "killed"; # idem pour le signal SIGQUIT (3)
while(1)
{
getc;
}
le chrono
- Code: Tout sélectionner
#!/usr/bin/perl -w
# creation d'un processus chrono qui compte les secondes
# sur le signal SIGINT ( CTRL C) le processus affiche la valeur du compteur
# sur le signal SIGQUIT ( CTRL MAJ \ ) le processus affiche le compteur et quitte.
#
# tester aussi le comportement du pgme en le lancant dans une fenetre et envoi des signaux depuis une autre
# kill -2 pid provoque affichage du compteur ( = SIGINT)
# kill -3 pid provoque affichage et arret ( = SIGQUIT)
$nsec = 0 ; # nbre de secondes
sub seconde
{
print "coucou\n";
alarm(1); # on repositionne l'evenement SIGALRM
$nsec = $nsec + 1;
}
sub inter
{
# affiche la valeur du compteur
print "\n" , $nsec, " secondes ecoulees \n";
}
sub arret
{
# affiche la valeur du compteur et quitte
print "\n" , $nsec, " secondes ecoulees \n";
print "Fin du chronometre!";
# Process.exit!(0);
exit(0);
}
# debut du programme
# print "\ndebut \n"
$SIG {"ALRM"} = "seconde"; #on associe la fct handler au signal SIGALRM(14)
$SIG {"INT"} = "inter"; # idem pour le signal SIGINT (2)
$SIG {"QUIT"} = "arret"; # idem pour le signal SIGQUIT (3)
alarm(1) ; # on initialise le processus
print "\ndebut ( $$ ) \n"; # on affiche le pid et on boucle
while (1) {
# getc
}
