62 lines
1.7 KiB
Ruby
62 lines
1.7 KiB
Ruby
|
#!/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
|
|||
|
|
|||
|
# ???????
|
|||
|
|