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


9

当前,我使用两个不同的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

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

Answers:


6

我不确定是否要指出一些明显的问题,但是第一种方法是创建两个永远运行的循环,而第二种方法是创建一个创建无限循环的无限循环,因此您将最终获得一个永恒的循环。 -无限循环数的增加。它创建一个无限循环,运行dwm,然后创建另一个无限循环-第一个无限循环尚未停止。即使其他遍已经运行,每个遍也会产生另一个dwm-status循环(while true将使它们无限期地运行)


谢谢迈克尔:不,这不是显而易见的,更多的是怀疑。这是否意味着第一种方法是正确的方法,还是有更有效的方法呢?
jasonwryan 2011年

@jasonwryan好吧,我不确定您要做什么。为什么您需要多次运行窗口管理器?我认为您可以只做dwm一次背景,然后dwm-status循环运行
Michael Mrozek

1
它使您无需关闭程序即可重新启动dwm。诚然,我很少使用它,但它仍然很方便...查看:wiki.archlinux.org/index.php/...
jasonwryan

1
@jasonwryan哇,那真是太黑了:)。然后,是的,第一种方法可能很好。尽管现在我理解了第二种方法,但是每次杀死dwm时,它应该只创建一个新的dwm-status循环,我认为这种情况并不常见,因此我不确定这实际上是造成您问题的原因
Michael Mrozekek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.