我可能会朝错误的方向接近这个问题,所以任何帮助将不胜感激。
我有一个 Ruby 脚本,除其他外,它还启动一个可执行文件。我想启动这个可执行文件 - 当前正在使用系统“”触发 - 然后继续执行脚本。当脚本完成时,我希望它退出但保持可执行文件运行。
最初我有以下内容
# Do some work
# Start the executable
system("executable_to_run.exe")
# Continue working
但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
这很有效,因为当线程在后台运行可执行文件时,我的脚本可以继续运行。不幸的是,当我的脚本退出时,可执行线程仍在运行,并且在线程退出之前它不会退出。如果我终止可执行文件,线程就会退出,脚本也会退出。
所以我需要做的是触发“executable_to_run.exe”并让它在后台运行。
我在 Windows 上使用 Ruby 1.8.7,这意味着 fork 尚未实现。我无法升级到 1.9,因为存在内部和外部团队依赖关系,我需要首先解决这些依赖关系(并且不会很快完成)。
我试过了
- 通过“开始”运行进程
命令但这仍然阻止
- 在可执行线程上调用 Thread.kill
但它仍然需要可执行文件
被杀
那么这是我可以在 Ruby 中做的事情,但我只是错过了一些东西,或者我是否因为无法使用 Fork 而遇到了问题?
提前致谢
detunized 的答案应该适用于 Windows。这是跨平台的:
pid = spawn 'some_executable'
Process.detach(pid) #tell the OS we're not interested in the exit status
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)