Запуск 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.

0 ответов

Другие вопросы по тегам