在Ruby中产生一个后台进程
我正在为一个学校项目编写一个ruby引导脚本,这个引导过程的一部分是启动几个后台进程(这些进程被写入并且正常工作)。 我想要做的事情是:
`/path/to/daemon1 &` `/path/to/daemon2 &` `/path/to/daemon3 &`
但是,在第一次调用daemon1时会阻塞。 我已经看到一个Process.spawn
方法的引用,但是这似乎是一个1.9+的function,而我仅限于Ruby 1.8。
我也试图从不同的线程执行这些守护进程,但我希望我的引导脚本能够退出。
那么如何启动这些后台进程,以便我的启动脚本不会阻塞并退出(但是仍然有在后台运行的守护进程)呢?
只要你在POSIX OS上工作,你可以使用fork
和exec
。
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。