Uma alternativa para aguardar a saída do sono seria com o comando wait
:
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
wait $pid $pid_sleep
echo "commands finished"
O script a seguir no Linux imprime "sleep 1 finished", mas em geral POSIX você não pode usar sleep 0.1
, já que o argumento tem que ser inteiro. Se eu deixar o comando fora, o script nunca sairá (por quê !?), mas terá muito poder de CPU. Se eu substituí-lo por ( : )
ele funciona no meu sistema, mas não tenho certeza, se será em geral, e até mesmo isso leva muita energia da CPU. Qual é a melhor solução POSIX?
#!/bin/sh
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
while kill -0 "$pid" 2>/dev/null; do
kill -0 "$pid_sleep" 2>/dev/null || {
echo sleep 1 finished
exit 0
}
sleep 0.1
done
Uma alternativa para aguardar a saída do sono seria com o comando wait
:
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
wait $pid $pid_sleep
echo "commands finished"