Cómo ejecutar un bucle infinito en segundo plano

17

¿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
user12a
fuente
No sorprenderá que está creando una gran cantidad de procesos.
Ed Heal
Pedir direcciones para una bomba tenedor?
Baazigar
1
¿Podría decirnos la intención detrás de ejecutar un bucle infinito en segundo plano?
neurona

Respuestas:

31

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í como

while /bin/true; do
    something_in_the_background
done &

# more stuff
Eric Renouf
fuente
10
while : ; do something ; done &
  • Las conchas Bourne anteriores no tenían truey falsecomo comandos incorporados. truefue simplemente un alias en lugar de :, y falsea algo así como let 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.
John
fuente
2
Su respuesta mejoraría enormemente al explicarla: es posible que el OP no sepa qué :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.
Derobert
Editado el cargo según sus comentarios
John
0

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.

daltonfury42
fuente