@ulrichschwarz está certo. Os testes de desempenho não devem executar ambos os processos paralelamente.
----
Você pode usar time
, que é uma palavra-chave do shell.
Na minha caixa debian há também um binário no PATH que tem mais opções. Nesse caso, \time
precisa ser usado para executar a versão binária.
Não existe fork explícito. Quero dizer, o shell faz tudo para você quando um programa é iniciado a partir da linha de comando ou de um script.
O shell inicia um programa em segundo plano quando &
é adicionado no final da linha de comando: por exemplo, sleep 6 &
Se dois programas forem iniciados em segundo plano, eles estão sendo executados simultaneamente.
wait
é um shell embutido. Quando usado sem parâmetro, o processo atual é suspenso para aguardar a finalização dos processos filhos atualmente ativos (em segundo plano).
Faça uma tentativa para isso:
realtime1=$(mktemp)
realtime2=$(mktemp)
\time -o "${realtime1}" -f "%e" sleep 5 &
\time -o "${realtime2}" -f "%e" sleep 10 &
wait
printf "Number of seconds used by program1: %s\n" $(cat "${realtime1}")
printf "Number of seconds used by program2: %s\n" $(cat "${realtime2}")
O teste:
$ bash script.sh
Number of seconds used by program1: 5.00
Number of seconds used by program2: 10.00