代码之家  ›  专栏  ›  技术社区  ›  Dave DeLong

在Ruby中生成后台进程

  •  38
  • Dave DeLong  · 技术社区  · 15 年前

    我正在为一个学校项目编写一个Ruby引导脚本,这个引导过程的一部分是启动两个后台进程(这些进程是正确编写和运行的)。我想做的是:

    `/path/to/daemon1 &`
    `/path/to/daemon2 &`
    `/path/to/daemon3 &`
    

    但是,这会在执行守护进程1的第一个调用上阻塞。我看到过一个 Process.spawn 方法,但这似乎是一个1.9+特性,我只限于Ruby1.8。

    我还尝试从不同的线程执行这些守护进程,但我希望引导脚本能够退出。

    那么,我如何启动这些后台进程,使我的引导脚本不会阻塞并可以退出(但后台仍在运行守护进程)?

    2 回复  |  直到 8 年前
        1
  •  64
  •   Marcel Jackwerth    15 年前

    只要您在使用POSIX操作系统,就可以使用 fork exec .

    =创建子进程

    执行程序 =用另一个进程替换当前进程

    然后,您需要通知您的主流程对创建的子流程不感兴趣,方法是 Process.detach .

    job1 = fork do
      exec "/path/to/daemon01"
    end
    
    Process.detach(job1)
    
    ...
    
        2
  •  0
  •   Ihate_SA_admins    8 年前

    更好的伪去监控方法:

    `((/path/to/deamon1 &)&)` 
    

    将该进程放入自己的shell中。

    实现后台监控的最佳方法:

    `service daemon1 start`
    

    并确保服务器/用户具有启动实际守护进程的权限。查看Linux的“deamonize”工具以设置您的deamon。