Execute os dois processos em segundo plano e, em seguida, wait -n
a aguardar para um deles sair.
Bash não informa qual processo foi encerrado, mas você pode executar jobs -p
para obter a lista de trabalhos em segundo plano que ainda estão sendo executados e eliminá-los.
start_server_1 &
server_1_pid=$!
start_server_2 &
server_2_pid=$!
wait -n
kill $(jobs -p)
wait -n
é novo no bash 4.3. Em versões mais antigas, isso é muito mais difícil.
Outros shells comuns não têm wait -n
, mas eles permitem que você defina um trap em SIGCHLD e chame plain wait
. No traço, ksh93, mksh e zsh, você pode escrever
trap 'kill $server_1_pid $server_2_pid; exit' CHLD
wait
Isso não funciona no bash porque a interceptação SIGCHLD só é invocada depois que todas as tarefas terminarem de ser executadas.