Le moyen le plus efficace d'exécuter 2 en boucle

9

Actuellement, j'utilise deux whileboucles différentes pour démarrer mon gestionnaire de fenêtres, dwm , et la barre d'état qui lui imprime des informations système.

Ma solution pour le moment est de les exécuter consécutivement dans le même script, comme ceci:

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

Je l'ai également vu fonctionner comme une whileboucle imbriquée , comme ceci:

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

Le second semble provoquer des pics de CPU. En termes d'efficacité (moins de recours aux ressources, etc.), quelle est la meilleure approche pour exécuter ces deux boucles et pourquoi?

jasonwryan
la source

Réponses:

6

Je ne sais pas si je souligne quelque chose d'évident, mais la première façon consiste à créer deux boucles qui s'exécutent pour toujours, tandis que la seconde crée une boucle infinie qui crée des boucles infinies, donc vous allez vous retrouver avec un jamais -augmentation du nombre de boucles infinies. Il crée une boucle infinie, exécute dwm, puis crée une autre boucle infinie - la première boucle infinie ne s'est pas arrêtée. Chaque passage fera une autre boucle de statut dwm, même si les autres sont déjà en cours d'exécution ( while trueles gardera en cours d'exécution indéfiniment)

Michael Mrozek
la source
Merci Michael: non, ce n'était pas évident, plutôt un soupçon. Cela signifie-t-il que la première approche est la bonne ou existe-t-il un moyen plus efficace de le faire?
jasonwryan
@ jasonwryan Eh bien, je ne sais pas exactement ce que vous essayez de faire. Pourquoi auriez-vous besoin d'exécuter votre gestionnaire de fenêtres plusieurs fois? Je pense que vous pourriez simplement faire dwmune mise en arrière une fois, puis courir dwm-statusen boucle
Michael Mrozek
1
Il vous permet de redémarrer dwm sans fermer les programmes. Certes, je l'utilise rarement, mais c'est néanmoins pratique ... Voir: wiki.archlinux.org/index.php/… "
jasonwryan
1
@jasonwryan Wow, c'est incroyablement hackish :). Alors oui, la première approche est probablement bonne. Bien que maintenant que je comprends la deuxième façon, cela ne devrait faire qu'une nouvelle boucle de statut dwm chaque fois que vous tuez dwm, ce qui, je suppose, n'est pas si fréquent, donc je ne suis pas sûr que ce soit la cause de vos problèmes
Michael Mrozek