在Ruby中生成后台进程

时间:2010-03-23 23:43:13

标签: ruby background-process

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

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

但是,第一次调用时会阻塞执行daemon1。我见过对Process.spawn方法的引用,但这似乎是一个1.9+的特性,我只限于Ruby 1.8。

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

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

2 个答案:

答案 0 :(得分:64)

只要您正在使用POSIX OS,就可以使用forkexec

fork =创建子流程

exec =将当前流程替换为其他流程

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

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

Process.detach(job1)

...

答案 1 :(得分:0)

伪伪化的更好方法:

self.longPressRecog = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];

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

实际守护的最好方法:

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

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