cours0708/P5B/ruby/multiChrono.rb

62 lines
1.7 KiB
Ruby

#!/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
# ???????