Начнем с того, что я новичок в программировании и т. д., поэтому прошу прощения за отсутствие профессионально точной терминологии в моем вопросе, но, надеюсь, мне удастся донести свою точку зрения!
Не могли бы вы предложить, как в bash или tcsh я могу запустить длительный фоновый процесс, который сам запускает несколько программ и должен запускать три длинных процесса параллельно на разных ядрах и ждать завершения всех трех, прежде чем продолжить ...?
Я написал сценарий оболочки (для bash), чтобы применить фильтр изображения к каждому кадру короткого, но тяжелого видеоклипа (на самом деле это научная томограмма, но это не имеет большого значения). Предполагается:
Создайте файл со сценарием для преобразования всего файла в другой формат с помощью программного обеспечения em2em.
Разделите преобразованный файл на три равные части и отфильтруйте каждый набор кадров в отдельном процессе на отдельных ядрах на моем Linux-сервере (для ускорения работы) с помощью программы-паука. Сначала создаются три файла пакетного режима (filter_1/2/3.spi) с необходимыми параметрами фильтрации, после чего запускаются три подпроцесса:
spider spi/spd @filter_1 & # The first process to be launched by the main script and run in the background on one core spider spi/spd @filter_2 & # The second background process run on the next core spider spi/spd @filter_3 # The third process to be run in parallel with the two above and be finished before proceeding further.
Затем эти отфильтрованные фрагменты объединяются в конце.
Поскольку я хотел, чтобы 3 шага фильтрации выполнялись одновременно, я отправил первые два в фоновый режим с помощью простого & и оставил последний на переднем плане, так что основной процесс сценария будет ждать завершения всех трех шагов (должно происходить одновременно). время), прежде чем приступить к повторной сборке 3 кусков. Все это прекрасно работает, когда я запускаю свой скрипт на переднем плане, но он выводит на терминал много выходной информации из множества подпроцессов. Я могу уменьшить его с помощью:
$ ./My_script 2>&1 > /dev/null
Но каждый процесс паука все еще возвращается
*****Spider normal stop*****
к терминалу. Когда я пытаюсь отправить основной процесс в фоновый режим, он все время останавливается.
У вас есть какие-либо предложения, как я могу запустить основной скрипт в фоновом режиме и все же заставить его каким-то образом запускать 3 подпроцесса паука параллельно?
Спасибо!
./My_script 2>&1 > /dev/null
, который направляет stdout на /dev/null, а stderr — на исходный stdout (tty, в котором вы вводите команду), попробуйте перенаправить оба на /dev/null с помощью./My_script > /dev/null 2>&1
. Порядок имеет значение. - person William Pursell   schedule 07.10.2013