如何使用Daemons gem获取第一个任务的pid?

时间:2012-06-21 22:54:58

标签: ruby fork pid multiple-instances daemons

我正在尝试使用Daemons gem运行相同代码/脚本的多个实例。我一直在IRB会话中玩它,似乎无法获得我正在寻找的功能。我希望多次运行相同的脚本来跟踪PID,以便我可以手动启动和停止进程。更具体地说,我有一个rails模型,其实例将控制一个进程,所以我需要使用像

这样的东西来启动和停止它
mydaemon = MyDaemon.create
mydaemon.start # starts the process
mydaemon.stop  # stops the process

但是,为了实现这样的目的,我想在活动记录中存储进程的PID。当我在IRB中运行以下代码时:

require 'rubygems'        # if you use RubyGems
require 'daemons'

task1 = Daemons.call(:multiple => true) do
  loop {
    File.open("/tmp/daemon_test.log", "w") {|f| f.write(Time.now.to_s + "\n")}
    sleep 5
  }
end

任务自动启动(没有在task1上调用start),而不是返回pid,它返回与task1关联的Daemons :: Application对象。当我启动task1的第二个实例时,我只能访问pid,即:

task1.start
 => 574 # PID of process but now I have 2 proc's running, one of which I don't know the PID of

我使用守护进程错了吗?或者是否无法获取在调用Daemons.call时自动启动的第一个进程的PID?

谢谢, 托梅克

1 个答案:

答案 0 :(得分:0)

Daemons::Application对象具有返回docs say对象的公共属性pid的{​​{3}},因此请尝试使用task1.pid.pid