Запуск bash-скрипта из ruby не производит правильный pid
Я разрабатываю среду 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
каждая команда запускается одновременно системой, а не одна за другой, а pid возвращается t.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 - это инструмент, который подходит, а не системная команда. Опять же, эта команда, если она выполняется вручную, запускается perfeclty.