我正在开发一个ruby框架来运行不同的工作,我需要做的一件事就是知道这些工作何时结束才能使用他们的输出并组织一切。我一直在使用它没有问题,但有些colegues开始在不同的系统中使用它,并且发生了一些非常奇怪的事情。我所做的是使用
运行命令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
等命令的串联每个命令由系统同时运行,而不是一个接一个地运行,t.pid
返回的pid既不是正在运行的不同进程的pid。
我修改了代码而不是运行cammands的连接,而是创建了一个脚本,其中所有来自popen3的命令中的命令只是Open3.popen3("./script.sh")
,但行为是相同的...所有命令都运行同时,ruby知道的pid不是任何进程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执行(但是我希望它们能够运行时使用&& becasue如果前一个工作正常,我希望它们运行)。 Myfit.exe是一个适合的工具,不是系统命令。同样,这个命令,如果手动运行perfeclty。