我正在为学校项目编写一个ruby bootstrapping脚本,这个引导过程的一部分是启动一些后台进程(编写并正常运行)。我想做的是:
`/path/to/daemon1 &`
`/path/to/daemon2 &`
`/path/to/daemon3 &`
但是,第一次调用时会阻塞执行daemon1。我见过对Process.spawn
方法的引用,但这似乎是一个1.9+的特性,我只限于Ruby 1.8。
我也尝试从不同的线程执行这些守护进程,但我希望我的引导脚本能够退出。
那么我怎样才能启动这些后台进程,以便我的引导脚本不会阻塞并且可以退出(但仍然让守护进程在后台运行)?
答案 0 :(得分:64)
只要您正在使用POSIX OS,就可以使用fork
和exec
。
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'工具来设置你的守护。