ARGV
'u yöneten bir komisyon görevi gibi çalışmak için Thor'u kullanarak aşağıdaki bir komut dosyası var.Ruby'deki tüm süreçleri durdurmak için nasıl durdurulur?
#!/usr/bin/env ruby
require "thor"
class Run < Thor
desc "start", "start script"
def start
p1 = fork{ loop... }
p2 = fork{ loop... }
# 3 processes running
Process.detach(p1)
Process.waitpid(p1)
end
desc "stop", "stop script"
def stop
# kill all 3 pids
end
end
Run.start
ruby script.rb start
başladıktan sonra, iki alt prosesin (toplam üç) oluşturur. Sorum, ruby script.rb stop
'u çalıştırdığımda tüm işlemleri nasıl öldüreceğimiz. Web'de, başlangıçta, pid üst sürecini bir dosyada saklamalıyım ve durduğunda, okurum ve öldürüyorum. Sorun şu ki, ebeveynleri öldürmek çocukları öldürmez. Böylece üç belgeyi de dosyaya kaydedip birer birer öldürürüm.
Kendime bunun doğru yolunun ne olduğunu ve start
içindeki işlemlerle çalışma şeklimin doğru olup olmadığını soruyorum.
öyle senin durumda, daemonized hizmetlerin oldukça yaygın bir uygulama gibi görünüyor Dosya sistemindeki tüm PID'leri depolamak gibi bir anlam ifade ederse, doğru süreçleri öldürmenin en doğru yolu budur. –
Cevabınız için teşekkürler! – Luccas
Olası bir alternatif, nesne kendiliğinden düzgün bir şekilde temizlenecek olan GC'leri aldığında bir sonlandırıcı eklemek olabilir. http://stackoverflow.com/questions/5956067/ruby-destructors Ayrıca süreçleri yönetmek için Daemons gem kullanabilirsiniz. http://daemons.rubyforge.org/ –