Como posso executar um loop infinito em segundo plano, continuando com a execução do script?
Exemplo "script":
while true; do something_in_the_background; done
do_something_while_the_loop_goes_on_in_the_background
for 1 2 3; do somethingelse; done
exit 0
Isso (observe o &
) parece travar todo o sistema após um curto período de tempo:
while true; do
something_in_the_background &
done
do_something_while_the_loop_goes_on_in_the_background
for 1 2 3; do somethingelse; done
exit 0
Respostas:
Com o
&
interior do loop, ele inicia um novo processo em segundo plano e o mais rápido possível, sem esperar pelo término do primeiro processo. Em vez disso, acho que você deseja colocar o loop em segundo plano, então coloque o&
próprio loop comofonte
Os projéteis Bourne anteriores não tinham
true
efalse
como comandos embutidos.true
era simplesmente um alias para:
, efalse
para algo parecidolet 0
.&
no final da linha, o processo é processado:
é o comando nulo, conforme descrito por "help:":No effect; the command does nothing. Exit Status: Always succeeds.
fonte
:
significa e provavelmente não sabe por que você mudou o caminho&
para o fim. Além disso, alterar o espaçamento para torná-lo uma linha única é apenas confuso - é uma alteração que é muito visível, mas não tem importância.Colocar o sono de, digamos, 0,1 ou 0,01 segundos, tornaria seu loop mais amigável à CPU. Mas, como apontado por Eric Renouf, o & deve estar no final do loop, não dentro dele.
fonte