【发布时间】:2012-09-05 00:21:13
【问题描述】:
我正在尝试使用 daemons gem 启动和停止无限循环守护程序。
看着home page,我试过(在irb中):
require 'daemons'
=>true
task_handle = Daemons.call do
loop{
sleep 10
puts "foo"
}
end
=> #<Daemons::Application:0x000000043f96d0 ...
task_handle.stop
=> nil
task_handle2 = Daemons.call do
loop{
sleep 10
puts "bar"
}
end
=>Daemons::RuntimeException: there is already one or more instance(s) of the program running
from /home/bdares/.rvm/gems/ruby-1.9.3-p194/gems/daemons-1.1.9/lib/daemons/application_group.rb:125:in `new_application'
from /home/bdares/.rvm/gems/ruby-1.9.3-p194/gems/daemons-1.1.9/lib/daemons.rb:251:in `call'
from (irb):21
现在,我正在查看的确切示例(链接页面上的#3)使用选项:multiple => true 进行第一次调用,但我真的只需要一次运行一个守护程序(并且多个守护程序会,实际上是不可取的)。
第一个守护进程是否还活着并且没有被 GC 处理?如果是这样,我错过了什么?
【问题讨论】:
-
请记住,
Daemon只是 UNIX 守护进程的抽象,它只是另一个 UNIX 进程(通常由fork()创建,后跟daemonize())。所以 GC 对另一个 UNIX 进程实际上没有任何控制权。