Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用守护进程gem获取第一个任务的pid?_Ruby_Fork_Pid_Multiple Instances_Daemons - Fatal编程技术网

Ruby 如何使用守护进程gem获取第一个任务的pid?

Ruby 如何使用守护进程gem获取第一个任务的pid?,ruby,fork,pid,multiple-instances,daemons,Ruby,Fork,Pid,Multiple Instances,Daemons,我正在尝试使用守护进程gem运行同一代码/脚本的多个实例。我在IRB会议上一直在玩它,似乎无法获得我想要的功能。我希望多次运行同一个脚本,跟踪PID,以便手动启动和停止进程。更具体地说,我有一个rails模型,它的实例将控制一个进程,因此我需要使用 mydaemon = MyDaemon.create mydaemon.start # starts the process mydaemon.stop # stops the process 然而,为了实现这样的目标,我想将进程的PID存储在活

我正在尝试使用守护进程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),并返回与task1关联的守护进程::应用程序对象,而不是返回pid。我只有在启动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

谢谢,
Tomek

一个
Daemons::Application
对象有一个公共属性
pid
,它返回一个对象,所以尝试使用
task1.pid.pid
这个
Daemons::Application
对象有一个公共属性
pid
,它返回一个对象,因此,请尝试使用
task1.pid.pid

我不希望Daemoning代码在
irb
中运行良好。我建议改为通过脚本进行测试。@sarnold看起来运行脚本会产生相同的结果,我不希望Daemoning代码在
irb
中很好地发挥作用。我建议改为通过脚本进行测试。@sarnold看起来运行脚本会产生与运行task1.pid.pid相同的结果,运行task1.pid.pid会返回nil,正如我在上面的注释中所看到的那样。运行task1.pid.pid会返回nil。