Выполнить команду и распараллелить другие команды после завершения
Я ищу одну встроенную команду для выполнения /bin/first
а затем, когда он завершает, выполните следующее /bin/p1
, /bin/p2
, /bin/p3
параллельно после.
2 ответа
Когда вы запускаете и запускаете команды в фоновом режиме из сценария оболочки, добавляя & к команде, они будут выполняться почти полностью параллельно, поскольку сценарию не нужно будет ждать, пока команда завершится, прежде чем выполнить следующую строку в сценарии.
#!/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
Цикл for необходим только в том случае, если вы хотите выполнить некоторую обработку ошибок и проверить код завершения программ, которые вы выполняли параллельно. В противном случае простой wait
без каких-либо аргументов также будет ожидать завершения всех дочерних процессов.
Если вам нужно убедиться, что вывод не смешивается:
/bin/first
parallel ::: /bin/p1 /bin/p2 /bin/p3