Execute vários programas ao mesmo tempo em um script de inicialização/bash
Pergunta
Olá, estou trabalhando com um simulador que usa scripts RCS para inicializar, este é o meu script
cd /tests
./test1 &
./test2 &
./test3 &
./test4
exit
O que eu quero é executar todo o teste ao mesmo tempo e que o comando de saída é executado apenas quando todo o teste anterior terminar. E não apenas quando o teste 4 terminar, isso é possível?. Obrigada.
Solução
Você pode usar espera:
./test1 &
./test2 &
./test3 &
./test4 &
wait
Da página do Bash Man:
Aguarde [n ...] Aguarde por cada processo especificado e retorne seu status de rescisão. Cada 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 esperados. Se N não for fornecido, todos os processos infantis atualmente ativos são esperados e o status de retorno é zero. 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.
Outras dicas
xargs
pode suportar paralelo
Então, assim:
seq 4|xargs -i -n 1 -P 4 ./test{}
Algo parecido com
cd /tests
./test1 &
./test2 &
./test3 &
./test4 &
wait
exit
(Estou assumindo uma casca de bash)