在Ruby中产生一个后台进程

我正在为一个学校项目编写一个ruby引导脚本,这个引导过程的一部分是启动几个后台进程(这些进程被写入并且正常工作)。 我想要做的事情是:

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

但是,在第一次调用daemon1时会阻塞。 我已经看到一个Process.spawn方法的引用,但是这似乎是一个1.9+的function,而我仅限于Ruby 1.8。

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

那么如何启动这些后台进程,以便我的启动脚本不会阻塞并退出(但是仍然有在后台运行的守护进程)呢?

只要你在POSIX OS上工作,你可以使用forkexec

fork =创build一个subprocess

exec =将当前进程replace为另一个进程

然后您需要通知您的主进程对通过Process.detach创build的subprocess不感兴趣。

 job1 = fork do exec "/path/to/daemon01" end Process.detach(job1) ... 

那么,从技术上讲,你可以从字面上:

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

但显然,这样做不会做你想做的事情。

但是,您可以简单地将&作为parameter passing给system (和朋友),并将作为背景工作。

更好的方法来伪deamonize:

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

将把进程放到它自己的shell中。

最好的方式来实际守护:

 `service daemon1 start` 

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