Faz o seguinte script
#!/usr/bin/bash
while true
do
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done
fazer exatamente o mesmo que
#!/usr/bin/bash
while true
do
ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done
Pela minha experiência, o primeiro script cria nalog
o arquivo mais cedo (em segundos) do que o segundo script (após mais de 10 minutos), o que me sugere que o último espera ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
terminar. Não deve ser o caso porque pelo que pesquisei até agora o segundo script deve começar ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
sem esperar ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post
terminar. Eu quero que os dois ab
comandos sejam executados simultaneamente, como posso fazer isso no Bash?
PS É &
e não &&
. Eu sei o que &&
faz e não queria aplicá-lo aqui.
Não,
cmd1 [newline] cmd2
não é tão simultâneo quantocmd1 & cmd2
— o primeiro aguardacmd1
a conclusão antes de iniciarcmd2
.Se você deseja que a execução continue enquanto o primeiro comando é executado, você precisa manter o
&
ao dividir isso em duas linhas:torna-se
Se você quiser garantir que ambos os comandos sejam concluídos antes de fazer o loop novamente, você pode usar
wait
.Outras construções de shell também fornecem simultaneidade, notadamente pipes:
a | b
(ou sua variante em alguns shells,a |& b
, para redirecionar ambos os fluxos de saída¹) é executadoa
eb
simultaneamente, e aguarda a conclusão de ambos antes de continuar. Alguns shells também suportam coprocessos (consulte Como você usa o comando coproc em vários shells? ) e substituição de processo (consulte Como você usa o comando coproc em vários shells? ) que podem ser usados para executar comandos simultaneamente.Consulte Quais são os operadores de controle e redirecionamento do shell? para obter detalhes dos terminadores de lista (que incluem
&
) e operadores de pipe.¹ Exceto em ksh, onde é executado
a
como um coprocesso.