Запуск нескольких скриптов в параллельном скрипте bash

У меня есть сценарий bash, который содержит другие скрипты внутри, которые запускаются последовательно. Однако для их запуска требуется достаточно времени. Есть ли способ запускать эти скрипты параллельно, чтобы улучшить общую производительность? Они независимы друг от друга.

Он похож на:

#!/bin/bash #some code here cppcheck.sh churn.sh run.sh 

Обновить:

 **git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1]) if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt** sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html'; unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0; set ylabel 'Number of lines changed (total)'; set title 'Files with high churn level';set boxwidth 0.7; set style fill solid; set noborder; plot '${OUTPUT_DIR}/churn.txt' using 2:xticlabels(1) with boxes" | gnuplot echo "finished running churn.sh!" 

Это код внутри churn.sh. Команде bold требуется около 40 секунд для реализации. Если в главном скрипте я помещаю амперсанд после churn.sh &, он выдает сообщение об ошибке, когда sed не может прочитать файл churn.txt (так как он еще не создан). Кажется, что он не дожидается, пока вывод не будет сохранен в файле. Я вставил wait после этой команды, но это не поможет.

Использование & для запуска в фоновом режиме сделает трюк

 cppcheck.sh & churn.sh & run.sh & wait echo "All 3 complete" 

Это приведет к отказу от нового процесса для каждого из них.

Ожидание bash также пригодится, как указано в комментариях, если у вас есть что-то, что нужно запустить на родительском скрипте, после этих трех финишей.

Без аргумента он будет ждать завершения всех дочерних процессов, а затем возобновит выполнение родительского скрипта.


Проблемы, с которыми вы сталкиваетесь, по-видимому, напрямую связаны с этим. Набор переменных доступен только для суб-оболочки, в которой они определены . Таким образом, если у вас есть OUT_DIR указанный в родительском скрипте, он не будет видимым для дочернего скрипта, когда он отключается. Правильная вещь в этом случае – export переменную в качестве переменной среды.

  • Почему параллельный stream получается последовательно в Java 8
  • Разрыв параллельный.
  • Как создать streamи в nodejs
  • Julia: Как скопировать данные на другой процессор в Julia
  • Нет ConcurrentList в .Net 4.0?
  • Программа OpenMP на разных хостах
  • Что определяет количество streamов, создаваемых Java ForkJoinPool?
  • Уменьшение массива в OpenMP
  • Является ли это ошибкой в ​​Files.lines (), или я что-то не понимаю о параллельных streamах?
  • Запуск ограниченного числа дочерних процессов параллельно в bash?
  • В чем разница между асинхронным программированием и многоstreamовой обработкой?
  • Давайте будем гением компьютера.