运行 2 个 while 循环的最有效方法

jas*_*yan 9 bash control-flow

目前我使用两个不同的while循环来启动我的窗口管理器dwm和将系统信息打印到它的状态栏。

我目前的解决方案是在同一个脚本中连续运行它们,如下所示:

while true; do
        $HOME/Scripts/dwm-status
        sleep 2s
    done &
while true; do
    dwm >/dev/null
done
Run Code Online (Sandbox Code Playgroud)

我还看到它作为嵌套while循环运行,如下所示:

while true; do
        while true; do
            $HOME/Scripts/dwm-status
            sleep 2s
        done &
        dwm >/dev/null
    done
Run Code Online (Sandbox Code Playgroud)

第二个似乎导致 CPU 峰值。在效率方面(最少占用资源等),运行这两个循环的最佳方法是什么,为什么?

Mic*_*zek 6

我不确定我是否指出了一些明显的东西,但第一种方法是创建两个永远运行的循环,而第二种方法是创建一个无限循环来创建无限循环,所以你最终会得到一个永远- 增加无限循环的数量。它创建一个无限循环,运行 dwm,然后创建另一个无限循环——第一个无限循环还没有停止。每次传递都会产生另一个 dwm-status 循环,即使其他循环已经在运行(while true将使它们无限期地运行)