Заставить bash-файл ждать системных вызовов в Fortran - PullRequest
0 голосов
/ 31 октября 2019

Мой bash-скрипт выглядит примерно так

mpiexec ./fortran_bin |& tee text_file
wait

./process_output_files

Моя основанная на MPI программа Fortran выполняет несколько синхронных системных вызовов с call exec_cmd(cmd,wait=.true.). Моя проблема в том, что handle_output_files ждет только завершения fortran_bin, но некоторые системные команды (cmd) еще не выполнены, и это портит мои выходные файлы. Как заставить process_output_files ждать окончания cmd?

ПРИМЕЧАНИЯ

  1. Я не уверен, где лучше всего решить эту проблему (если есть решение):в Фортране, с MPI, в Баше ...
  2. cmd имеет форму cat out_{1..n} > out && rm -f out_{1..n}. Я хотел бы, чтобы он работал синхронно (wait=.false.), потому что cmd может занимать много времени и не иметь отношения к остальной части программы на Fortran.
  3. Строка wait в сценарии bash кажетсяне имеют никакого эффекта.
  4. Полагаю, вы могли бы задать такой же вопрос для программы на C / C ++, которая вызывает system(some_script). Но я могу только найти вопрос об ожидании в программе на C / C ++, если той же программе нужен результат вызванной команды (например, здесь и здесь ).

1 Ответ

0 голосов
/ 31 октября 2019

Из приведенных выше заметок похоже, что команда sub наследует stdout / stderr в вызывающем процессе и не оставляет никаких фоновых процессов.

Если эти предположения верны, вы можете подождать, покаот fortran_bin больше нет выходных данных, и это дочерние элементы, по конвейеру выводимые в cat (или аналогичные). Программа cat не прекратит работу, пока все дочерние элементы 'fortran_bin' (которые не перенаправили stderr) не завершат

mpiexec ./fortran_bin 2>&1 3>&1 | cat

Возможно использовать tee (или другие подобные программы) вместо cat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...