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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top