Самый эффективный способ запустить 2 цикла

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

Второй, кажется, вызывает скачки процессора. С точки зрения эффективности (наименьшее использование ресурсов и т. Д.), Каков наилучший подход для запуска этих двух циклов и почему?

jasonwryan
источник

Ответы:

6

Я не уверен, указал ли я на что-то очевидное, но первый способ - это создание двух циклов, которые выполняются вечно, а второй - создание бесконечного цикла, который создает бесконечные циклы, так что вы получите число бесконечных циклов. Он создает бесконечный цикл, запускает dwm, а затем создает еще один бесконечный цикл - первый бесконечный цикл не остановился. Каждый проход создаст другой цикл dwm-status, даже если остальные уже запущены ( while trueбудут работать бесконечно долго)

Михаил Мрозек
источник
Спасибо, Майкл: нет, это не было очевидно, больше подозрений. Означает ли это, что первый подход правильный или есть более эффективный способ сделать это?
jasonwryan
@jasonwryan Ну, я точно не знаю, что ты пытаешься сделать. Зачем вам нужно запускать ваш оконный менеджер несколько раз? Я бы подумал, что вы могли бы просто пройтись по фону dwmодин раз, а затем запустить dwm-statusцикл
Майкл Мрозек
1
Это позволяет вам перезапустить dwm, не закрывая программы. По общему признанию, я использую это нечасто, но это тем не менее удобно ... См .: wiki.archlinux.org/index.php/… "
jasonwryan
1
@jasonwryan Ого, это фантастически хакерски :). Тогда да, первый подход, вероятно, хорош. Хотя теперь, когда я понял второй способ, он должен создавать новый цикл dwm-status каждый раз, когда вы убиваете dwm, что, я полагаю, не так часто, так что я не уверен, что это на самом деле причина ваших проблем
Майкл Мрозек