cours0708/P5B/ruby/multiChrono.rb

62 lines
1.7 KiB
Ruby
Raw Normal View History

2008-11-25 21:11:16 +00:00
#!/usr/bin/ruby -w
# cr<63>ation d'un processus qui va cr<63>er un nouveau processus chrono <20> chaque fois
# qu'il recoit le signal SIGTERM (n<>15)
# sur le signal SIGINT (n<>2) le processus envoie ce signal <20> tous ses fils qui
# affichent <20> leur tour la) valeur du compteur
# sur le signal SIGQUIT (n<>3) le processus envoie ce signal <20> 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<63><72>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
# ???????