Comment puis-je exécuter une boucle infinie en arrière-plan, tout en poursuivant l'exécution du script?
Exemple de "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
Cela (remarquez le &
) semble planter l'ensemble du système après un court instant:
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
Réponses:
Avec l'
&
intérieur de la boucle, il démarrera un nouveau processus en arrière-plan et aussi vite qu'il pourra le faire à nouveau sans attendre la fin du premier processus. Au lieu de cela, je pense que vous voulez mettre la boucle en arrière-plan, alors mettez la&
sur la boucle elle-même commela source
Antérieures shells Bourne n'a pas eu
true
etfalse
comme intégré des commandes.true
était plutôt simplement aliasé:
, etfalse
quelque chose commelet 0
.&
à la fin de la ligne, le processus:
est la commande null, comme décrit par "help:":No effect; the command does nothing. Exit Status: Always succeeds.
la source
:
signifie et ne sait probablement pas pourquoi vous avez déplacé&
la fin. De plus, changer l'espacement pour en faire un monoligne est tout simplement déroutant - c'est un changement qui est très visible mais n'a aucune importance.Mettre en veille disons 0,1 ou 0,01 seconde rendrait votre boucle plus conviviale pour le processeur. Mais comme l'a souligné Eric Renouf, le & devrait être à la fin de la boucle, pas à l'intérieur.
la source