2011-08-31 110 views
0

我有一个Ruby进程监听给定的设备。我想通过Rails应用程序为不同设备启动/关闭它的实例。我可以找到的Ruby守护进程的所有内容似乎都是基于一组守护进程运行或使用消息队列进行后台处理。动态Ruby守护进程管理

我应该这样做与Kernel.spawn和存储在数据库中的PID?这看起来有点冒险,但如果没有现成的框架允许我调出/关闭守护进程,看起来我可能没有太多选择。

+0

你是什么意思“在设备上侦听”? –

+0

我使用serialport gem来侦听串行端口。 –

回答

1

除了生成另一个脚本并将PID保存在数据库中,您可以在同一个脚本中使用fork并在内存中保留PID来完成所有操作。下面是一个示例脚本 - 您可以通过键入命令控制台“添加”和“删除”添加和删除“工人情况”,用“退出”退出:

@pids = [] 
@counter = 0 

def add_process 
    @pids.push(Process.fork { 
    loop do 
     puts "Hello from worker ##{@counter}" 
     sleep 1 
    end 
    }) 
    @counter += 1 
end 

def del_process 
    return false if @pids.empty? 
    pid = @pids.pop 
    Process.kill('SIGTERM', pid) 
    true 
end 

def kill_all 
    while del_process 
    end 
end 

while cmd = gets.chomp 
    case cmd.downcase 
    when 'quit' 
    kill_all 
    exit 
    when 'add' 
    add_process 
    when 'del' 
    del_process 
    end 
end 

当然,这仅仅是一个例子,并发送命令和/或监视实例,你可以用一个小的Sinatra应用程序,套接字接口或命名管道等代替这个简单的循环。

+0

这是迄今为止最简单的解决方案。我只是在过度思考问题。因为我已经有一个孤立的班级为我做了一切事情,所以我可以“分开”()来分享我心中的内容。 –