Я ищу одну встроенную команду для выполнения /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