Como executar um loop infinito em segundo plano

16

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 (note que o & ) parece travar todo o sistema depois de um 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
    
por user12a 17.08.2015 / 20:57

3 respostas

27

Com o & dentro do loop, ele iniciará um novo processo em segundo plano e, da mesma forma, poderá fazê-lo novamente sem esperar que o primeiro processo termine. Em vez disso, eu acho que você quer colocar o loop em segundo plano, então coloque o & no próprio loop como

while /bin/true; do
    something_in_the_background
done &

# more stuff
    
por 17.08.2015 / 21:03
10
while : ; do something ; done &
  • Os shells anteriores de Bourne não tinham true e false como comandos incorporados. Em vez disso, true foi alias para : e false para algo como let 0 .

  • & no final dos planos de fundo da linha, o processo

  • : é o comando nulo, conforme descrito por "help:": No effect; the command does nothing. Exit Status: Always succeeds.
por 17.08.2015 / 21:31
0

Colocar o sono de, digamos, 0,1 ou 0,01 segundos tornaria seu circuito mais amigável ao CPU. Mas como apontado ser Eric Renouf, o & deve estar no final do loop, não dentro dele.

    
por 17.08.2015 / 21:39

Tags