41

我正在为一个学校项目编写一个 ruby​​ 引导脚本,这个引导过程的一部分是启动几个后台进程(它们已编写并正常运行)。我想做的是类似的事情:

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

但是,这会在第一次调用执行 daemon1 时阻塞。我见过对Process.spawn方法的引用,但这似乎是 1.9+ 的功能,而且我仅限于 Ruby 1.8。

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

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

4

2 回答 2

69

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

fork= 创建一个子进程

exec= 用另一个进程替换当前进程

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

job1 = fork do
  exec "/path/to/daemon01"
end

Process.detach(job1)

...
于 2010-03-24T00:06:19.913 回答
1

更好的伪去魔化方法:

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

会将进程放入它自己的外壳中。

实际守护进程的最佳方法:

`service daemon1 start`

并确保服务器/用户有权启动实际的守护进程。查看用于 linux 的“deamonize”工具来设置您的守护程序。

于 2017-02-18T00:55:58.520 回答