La forma más eficiente de ejecutar 2 bucles while

9

Actualmente utilizo dos whilebucles diferentes para iniciar mi administrador de ventanas, dwm , y la barra de estado que imprime información del sistema.

Mi solución en este momento es ejecutarlos consecutivamente en el mismo script, así:

while true; do
        $HOME/Scripts/dwm-status
        sleep 2s
    done &
while true; do
    dwm >/dev/null
done

También lo he visto ejecutarse como un whilebucle anidado , como este:

while true; do
        while true; do
            $HOME/Scripts/dwm-status
            sleep 2s
        done &
        dwm >/dev/null
    done

El segundo parece causar picos de CPU. En términos de eficiencia (menos recursos, etc.), ¿cuál es el mejor enfoque para ejecutar estos dos bucles y por qué?

jasonwryan
fuente

Respuestas:

6

No estoy seguro de si estoy señalando algo obvio, pero la primera forma es crear dos bucles que se ejecutan para siempre, mientras que la segunda es crear un bucle infinito que crea bucles infinitos, por lo que terminarás con un Número creciente de bucles infinitos. Crea un bucle infinito, ejecuta dwm y luego crea otro bucle infinito: el primer bucle infinito no se ha detenido. Cada pasada realizará otro bucle de estado de dwm, aunque las otras ya se estén ejecutando (las while truemantendrá ejecutándose indefinidamente)

Michael Mrozek
fuente
Gracias Michael: no, no era obvio, más bien una sospecha. ¿Eso significa que el primer enfoque es el correcto, o hay una manera más eficiente de hacerlo?
jasonwryan
@jasonwryan Bueno, no estoy seguro de lo que estás tratando de hacer, exactamente. ¿Por qué necesitaría ejecutar su administrador de ventanas varias veces? Pensaría que podrías dwmpasar dwm-statusa un segundo plano y luego correr en un bucle
Michael Mrozek
1
Le permite reiniciar dwm sin cerrar programas. Es cierto que lo uso con poca frecuencia, pero no obstante es útil ... Ver: wiki.archlinux.org/index.php/… "
jasonwryan
1
@jasonwryan Wow, eso es fantásticamente hack :) Entonces sí, el primer enfoque es probablemente bueno. Aunque ahora que entiendo la segunda forma, solo debería hacer un nuevo bucle de estado dwm cada vez que matas dwm, lo que supongo que no es tan frecuente, por lo que no estoy seguro de que sea realmente la causa de tus problemas
Michael Mrozek