我可能在错误的方向上接近这个,所以任何帮助将不胜感激。
我有一个 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 而遇到问题?
提前致谢