[TP-FORK] gérer le temps et les signaux systeme

hum hum ...

[TP-FORK] gérer le temps et les signaux systeme

Messagede cipher16 le Mar 29 Avr 2008 15:02

Le multi chrono
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
}
cipher16
Administrateur du site
 
Messages: 29
Inscription: Mer 12 Mar 2008 14:15
Localisation: Alsace


Retourner vers Perl

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron