#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait
(sem argumentos) aguardará até que todos os processos em segundo plano sejam encerrados.
A descrição completa wait
do bash
manual:
wait [-n] [n ...]
Aguarde cada processo filho especificado e retorne seu status de encerramento. Cada um n
pode ser um ID de processo ou uma especificação de trabalho; se uma especificação de trabalho for fornecida, todos os processos no pipeline desse trabalho serão aguardados. Se n
não for fornecido, todos os processos filhos ativos no momento são aguardados e o status de retorno é zero. Se a
-n
opção for fornecida, wait
aguarde o término de qualquer trabalho e retorne seu status de saída. Se n
especificar um processo ou trabalho inexistente, o status de retorno será 127. Caso contrário, o status de retorno será o status de saída do último processo ou trabalho aguardado.
PID1=$!
e, em seguida, esperar por todas elaswait "$PID1" "$PID2" "$PID3"
. Isso é um pouco mais complicado, mas funcionará se o processo tiver outros filhos pelos quais você não deseja esperar.