0

我正在开发一个 ruby​​ 框架来运行不同的作业,我需要做的一件事是知道这些作业何时结束,以便使用它们的输出并组织所有内容。我一直在毫无问题地使用它,但是一些同事开始在不同的系统中使用它,并且发生了一些非常奇怪的事情。我所做的是使用运行命令

i,o,e,t = Open3.popen3(job.get_cmd)
p = t.pid

后来我检查工作是否像这样结束:

begin
   Process.getpgid(p)
rescue Errno::ESRCH
   # The process ended
end

它在我正在运行的系统(Scientifi linux 6)中完美运行,但是当我的一个朋友开始在 Ubuntu 14.04 上运行(使用 ruby​​ 1.9.3p484)并且命令是命令的串联,例如cmd1 && cmd2 && cmd3每个命令同时运行由系统,不是一个接一个,返回的pidt.pid既不是正在运行的不同进程的pid。

我修改了代码,而不是运行 cammands 的串联,而是创建了一个脚本,其中包含从 popen3 调用的命令中的所有命令,Open3.popen3("./script.sh")但行为是相同的......所有命令同时运行并且 pid ruby 知道不是任何进程 pid...

我不确定这是否与 ruby​​ 相关,但由于script.sh手动运行它的行为符合预期,一个接一个地运行一个命令,似乎 ruby​​ 没有相应地启动进程,或者系统没有按应有的方式读取进程。你知道可能会发生什么吗?

非常感谢!

编辑:正在运行的命令如下所示 ./myFit.exe h vlq.config &> output_h.txt && ./myFit.exe d vlq.config &> output_d.txt && ./myFit.exe p vlq.config &> output_p.txt

这个命令,如果手动运行而不是在 ruby​​ 脚本内运行完美,正是这个命令。从 ruby​​ 脚本运行时,它会同时运行所有 myFit.exe 执行(但我希望它们与 h && 一起运行,因为如果前面的工作正常,我希望它们运行)。Myfit.exe 是一个适合的工具,不是系统命令。同样,如果手动运行此命令,则运行完美。

4

0 回答 0