2つのwhileループを実行する最も効率的な方法


9

現在、2つの異なるwhileループを使用して、ウィンドウマネージャーdwmと、システム情報を出力するステータスバーを起動しています。

現在の私の解決策は、次のように同じスクリプトでそれらを連続して実行することです。

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

次のように、ネストされたループとして実行されることも確認しましたwhile

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

2番目は、CPUスパイクを引き起こすようです。効率性(リソースの最小呼び出しなど)の観点から、これらの2つのループを実行するための最良のアプローチは何ですか?なぜですか?

回答:


6

明らかなことを指摘しているかどうかはわかりませんが、1つ目の方法は、永久に実行される2つのループを作成することです。2つ目の方法は、無限ループを作成する無限ループを作成することです。 -無限ループの数を増やします。無限ループを作成し、dwmを実行してから、別の無限ループを作成します。最初の無限ループは停止していません。他のパスがすでに実行されている場合でも、各パスは別のdwm-statusループを作成します(while trueそれらを無期限に実行し続けます)


マイケルに感謝:いいえ、それは明白ではありませんでした。それは最初のアプローチが正しいものであることを意味しますか、それを行うためのより効率的な方法はありますか?
jasonwryan

@jasonwryanさて、あなたが何をしようとしているのか、正確にはわかりません。ウィンドウマネージャーを複数回実行する必要があるのはなぜですか?私はあなたがdwm一度だけバックグラウンドで実行dwm-statusしてからループで実行できると思います
マイケル・ムロゼック

1
プログラムを閉じずにdwmを再起動できます。確かに、私はめったに使用しませんが、それでも便利です...参照:wiki.archlinux.org/index.php/… "
jasonwryan

1
@jasonwryanうわー、それは素晴らしいハックです:)。次に、はい、最初のアプローチはおそらく良いです。私は2番目の方法を理解しましたが、dwmを強制終了するたびに新しいdwm-statusループを作成するだけです。これはそれほど頻繁ではないと思われるため、それが実際に問題の原因であるかどうかはわかりません
Michaelムロゼック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.