Назад | Перейти на главную страницу

Выполнить команду, а затем распараллелить другие команды после завершения

Я ищу одну встроенную команду для выполнения /bin/first а затем, когда он завершится, выполните следующие /bin/p1, /bin/p2, /bin/p3 параллельно после.

Когда вы запускаете и выполняете команды в фоновом режиме из сценария оболочки, добавляя & к команде, они будут выполняться почти полностью параллельно, потому что сценарию не нужно будет ждать завершения команды перед выполнением следующей строки в сценарии.

#!/bin/bash 
/bin/first
/bin/p1 &
/bin/p2 &
/bin/p3 

Примечание: Когда сценарий завершится, p1 и p2 могут все еще работать в фоновом режиме!

Чтобы облегчить это, ваш скрипт становится немного более сложным, так как вам нужно будет захватить PID и wait для них:

#!/bin/bash 
/bin/first
/bin/p1 &
PID1=$!
/bin/p2 & 
PID2=$!
/bin/p3 & 
PID3=$!  
for PIDS in $PID1 $PID2 $PID3 ;
do
  wait $PIDS
done

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

Если вам нужно убедиться, что вывод не смешивается:

/bin/first
parallel ::: /bin/p1 /bin/p2 /bin/p3