在Ruby中产生一个独立的线程或进程

我可能正在接近这个错误的方向,所以任何帮助,将不胜感激。

我有一个Ruby脚本,其中包括启动一个可执行文件。 我想启动这个可执行文件 – 目前正在使用系统“”触发 – 然后继续执行脚本。 脚本完成后,我希望它退出,但保持可执行文件正在运行。

本来我有以下

# Do some work # Start the executable system("executable_to_run.exe") # Continue working 

但是,executable_to_run.exe是一个阻塞的可执行文件,系统“”将不会退出,直到可执行文件结束运行(我不希望它)

所以我现在有这样的东西(大幅减less)

 # Do some work # Start the executable on it's one thread Thread.new do system("executable_to_run.exe") end # Continue working 

这很好,因为我的脚本可以继续运行,而线程在后台运行可执行文件。 不幸的是,当我的脚本退出时,可执行线程仍在运行,直到线程退出才会退出。 如果我杀死可执行文件,线程退出,脚本退出。

所以我需要做的是触发“executable_to_run.exe”,只是让它在后台运行。

我在Windows上使用Ruby 1.8.7,这意味着fork是未实现的。 我不能升级到1.9,因为有内部和外部的团队依赖,我需要先解决(而且不会很快完成)。

我试过了

  • 通过“开始”命令运行进程,但仍然阻塞
  • 在可执行线程上调用Thread.kill,但仍然需要杀死可执行文件

那么,这是我可以在Ruby中做的事情,我只是失去了一些东西,或者我有一个问题,因为我不能使用Fork?

提前致谢

失踪的答案应该在Windows上工作。 这是一个跨平台的:

 pid = spawn 'some_executable' Process.detach(pid) #tell the OS we're not interested in the exit status 

我刚刚尝试,并start不阻止在Windows 7 x64与Ruby 1.8.7。

 system 'start notepad' puts 'Exiting now...' 

这显然是Windows特有的。