2015-04-07 3 views
0

Ниже упрощенные (команды printf/echo/cd/sleep/progressbar, которые не имеют значения, оставлены без изменений). Сценарий оболочки bash завершается после первого выполнения двоичного файла. Почему это? Могу ли я сделать или проверить что-либо без изменения самого двоичного файла (может ли это сделать только в определенной степени)?Сценарий оболочки bash завершается после выполнения программы в цикле

PROGRESS=0 
SIMULATIONS=30 

for number in $(seq ${PROGRESS} ${SIMULATIONS}) 
    do 
    echo 'INB4 TERMINATION' 
    nohup ./binary -someflag 
    # do other stuff next 
    echo 'NEVER GETS HERE' 
done 

Я прочитал на traps, но добавив следующую строку:

trap "echo 'trap invoked'; exit" SIGHUP SIGINT SIGTERM 
  • не похоже на работу.
  • Использование nohup или нет, похоже, не имеет значения.
  • Петля отлично работает без двоичной команды.

, что двоичная делает

Он работает 3D-эксперимент моделирования робот (который сам по себе вилы один раз запустить 2 робота тренажерных процессов параллельно (с использованием C/C система ++() команда). Кроме того, каждый симулятор роботов запускает поток для каждого из 16 контроллеров роботов). Таким образом, двоичный файл представляет собой родительский процесс из 32 потоков. Если это имеет смысл вообще, имеет ли это значение?

+0

запустить ли сценарий двоичная, как ожидалось? (По крайней мере, в первый раз?) – hek2mgl

+0

Да, извините, забыл добавить это. Бинарный файл не выдает никаких ошибок и (возможно) заканчивается с статусом выхода 0. Я не думаю, что могу проверить статус выхода, потому что мой скрипт уходит сразу после этого, или я должен быть в состоянии? –

+0

вы можете попробовать добавить inline 'echo $?' Сразу после вызова своего скрипта для проверки статуса выхода: 'nohup ./binary -someflag; echo $? '. –

ответ

0

Я только что узнал, что вызвало это. Я вытащил функцию баха-индикатора выполнения из где-то и вызвал эту функцию после ./binary. Это заставило мой скрипт остановиться ... Я просто не думал, что это было причиной раньше, потому что ничего не выводило. Это было глупое предположение.

Для полноты, это прогресс бар я использовал: https://github.com/fearside/ProgressBar/

+0

Это связано с тем, что важно создать MCVE (http://stackoverflow.com/help/mcve) - если бы вы предприняли шаги по созданию и тестированию того, что продемонстрировало ошибку, и не содержало внешних зависимостей (так другие люди могли бы запустить его и увидеть проблему сами по себе - и не содержали бы ничего, кроме минимального, необходимого для этого поведения), этот процесс вначале продемонстрировал бы, где проблема. –

Смежные вопросы