首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态Ruby守护进程管理

动态Ruby守护进程管理
EN

Stack Overflow用户
提问于 2011-08-31 12:39:45
回答 1查看 262关注 0票数 0

我有一个监听给定设备的Ruby进程。我想使用rails应用程序为不同的设备增加/减少它的实例。我所能找到的所有Ruby守护进程似乎都是基于一组正在运行的守护进程或使用消息队列进行后台处理。

我是否应该只使用Kernel.spawn执行此操作,并将PID存储在数据库中?这似乎有点老生常谈,但如果没有一个现有的框架,允许我启动/关闭守护进程,我似乎没有太多的选择。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-31 15:45:23

您可以在同一脚本中使用fork并将PID保存在内存中,而不是生成另一个脚本并将PID保存在数据库中。以下是一个示例脚本-您可以通过在控制台中键入命令" add“和"del”来添加和删除"worker instance“,然后使用”quit“退出:

代码语言:javascript
复制
@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应用程序、套接字接口或命名管道等替换这个简单的gets循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7252611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档