¿Cómo puedo ejecutar un bucle infinito en el fondo, mientras que de continuar con la ejecución del script?
Ejemplo "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
Esto (observe que &
) parece bloquear todo el sistema después de un corto tiempo:
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
Respuestas:
Con el
&
interior del bucle, comenzará un nuevo proceso en segundo plano y tan rápido como pueda hacerlo de nuevo sin esperar a que termine el primer proceso. En cambio, creo que quieres poner el bucle en segundo plano, así que pon&
el bucle en sí comofuente
Las conchas Bourne anteriores no tenían
true
yfalse
como comandos incorporados.true
fue simplemente un alias en lugar de:
, yfalse
a algo así comolet 0
.&
al final de la línea de fondos el proceso de:
es el comando nulo, tal como se describe por "ayuda":No effect; the command does nothing. Exit Status: Always succeeds.
fuente
:
significa y probablemente no sepa por qué lo ha movido&
hasta el final. Además, cambiar el espacio para convertirlo en una sola línea es simplemente confuso: es un cambio que es muy visible pero no tiene importancia.Poner el sueño de, por ejemplo 0.1 o .01 segundos haría que su lazo más con tu CPU. Pero a medida que fuera puntiaguda ser Eric Renouf, el y debe estar al final del bucle, no dentro de ella.
fuente