Die effizienteste Methode, um 2 while-Schleifen auszuführen

9

Derzeit verwende ich zwei verschiedene whileSchleifen, um meinen Fenstermanager dwm und die Statusleiste zu starten , in der Systeminformationen gedruckt werden.

Meine derzeitige Lösung besteht darin, sie nacheinander im selben Skript auszuführen:

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

Ich habe auch sie laufen gesehen als verschachtelte whileSchleife, wie folgt aus :

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

Die zweite scheint CPU-Spitzen zu verursachen. Was ist in Bezug auf die Effizienz (geringster Ressourcenbedarf usw.) der beste Ansatz, um diese beiden Schleifen auszuführen, und warum?

Jasonwryan
quelle

Antworten:

6

Ich bin mir nicht sicher, ob ich auf etwas Offensichtliches hinweise, aber der erste Weg besteht darin, zwei Schleifen zu erstellen, die für immer laufen, während der zweite darin besteht, eine Endlosschleife zu erstellen, die Endlosschleifen erzeugt, sodass Sie am Ende eine Ewigkeit haben -erhöhende Anzahl von Endlosschleifen. Es erstellt eine Endlosschleife, führt dwm aus und erstellt dann eine weitere Endlosschleife - die erste Endlosschleife wurde nicht gestoppt. Jeder Durchlauf führt zu einer weiteren DWM-Statusschleife, obwohl die anderen bereits ausgeführt werden ( while truesie werden unbegrenzt ausgeführt).

Michael Mrozek
quelle
Danke Michael: Nein, es war nicht offensichtlich, eher ein Verdacht. Bedeutet das, dass der erste Ansatz der richtige ist, oder gibt es einen effizienteren Weg, dies zu tun?
Jasonwryan
@ jasonwryan Nun, ich bin mir nicht sicher, was Sie genau versuchen zu tun. Warum sollten Sie Ihren Fenstermanager mehrmals ausführen müssen? Ich würde denken, Sie könnten nur dwmeinmal Hintergrund und dann dwm-statusin einer Schleife laufen
Michael Mrozek
1
Sie können dwm neu starten, ohne Programme zu schließen. Zugegeben, ich benutze es selten, aber es ist trotzdem praktisch ... Siehe: wiki.archlinux.org/index.php/… "
jasonwryan
1
@ Jasonwryan Wow, das ist fantastisch hackisch :). Dann ist der erste Ansatz wahrscheinlich gut. Obwohl ich jetzt den zweiten Weg verstehe, sollte es nur jedes Mal eine neue dwm-Statusschleife geben, wenn Sie dwm töten, was vermutlich nicht so oft vorkommt, also bin ich mir nicht sicher, ob es tatsächlich die Ursache Ihrer Probleme ist
Michael Mrozek