#!/usr/bin/ruby -w # création d'un processus qui va créer un nouveau processus chrono à chaque fois # qu'il recoit le signal SIGTERM (n°15) # sur le signal SIGINT (n°2) le processus envoie ce signal à tous ses fils qui # affichent à leur tour la) valeur du compteur # sur le signal SIGQUIT (n°3) le processus envoie ce signal à tous ses fils qui # affichent la valeur de leur compteur et quittent. # ============================================================================= # les ????? signifient que les instructions MANQUENT t = [] # tableau contenant les n° de process des fils (ou filles !) créés trap("SIGTERM") { # creation d'un nouveau processus "chrono" pid=fork if pid == nil # code du FILS exec("chrono.rb") # exec prend le dessus sur tout le reste. # Si erreur, alors c'est pas normal exit 99 else # code du PERe # ????? # on ajoute dans t, le n° processus du nouveau fils puts "nouveau chrono cree (" + pid.to_s + ")\n " # variante ecriture : puts "nouveau chrono cree ( #{pid} )\n " puts "liste des n° processus fils\n" t.each do |e| puts e end end } trap("SIGINT") { # affiche la valeur du compteur de chaque chrono puts "\n on transmet le signal SIGINT a tous les chronometres fils \n" # ??????? } trap("SIGQUIT") { puts "\n on transmet le signal SIGQUIT a tous les chronometres fils \n" t.each do |elt| Process.kill("SIGQUIT", elt) end t = [] # on vide le tableau exit 0 } # debut du "main" puts "\nInitialisation - programme principal PID= " + $$.to_s + "\n" # variante : puts "\nInitialisation - programme principal PID= #{$$} \n" # on affiche le pid et on boucle # ???????