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

Lee*_*der 8 ruby windows ruby-1.8

我可能正朝着错误的方向前进,所以任何帮助都会受到赞赏.

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

最初我有以下内容

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

# Continue working
Run Code Online (Sandbox Code Playgroud)

但是executable_to_run.exe是一个阻塞可执行文件,系统""将不会退出,直到可执行文件完成运行(我不希望它)

所以我现在有这样的事情(大幅削减)

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

# Continue working
Run Code Online (Sandbox Code Playgroud)

这很有效,因为我的脚本可以在线程在后台运行可执行文件时继续运行.不幸的是,当我的脚本退出时,可执行线程仍在运行,并且在线程退出之前不会退出.如果我杀死可执行文件,则线程退出并退出脚本.

所以我需要做的是触发"executable_to_run.exe"并让它在后台运行.

我在Windows上使用Ruby 1.8.7,这意味着fork未实现.我无法升级到1.9,因为我需要首先解决内部和外部团队依赖关系(并且不会很快完成).

我试过了

  • 通过'start'命令运行该进程但仍然阻塞
  • 在可执行线程上调用Thread.kill但它仍然需要杀死可执行文件

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

提前致谢

det*_*zed 3

我刚刚尝试过,start在使用 Ruby 1.8.7 的 Windows 7 x64 上并没有被阻止。

system 'start notepad'
puts 'Exiting now...'
Run Code Online (Sandbox Code Playgroud)

这显然是 Windows 特定的。