Как запустить бесконечный цикл в фоновом режиме

17

Как я могу запустить бесконечный цикл в фоновом режиме, продолжая выполнение сценария?

Пример "скрипт":

while true; do something_in_the_background; done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

Это (обратите внимание на &), кажется, разрушает всю систему через некоторое время:

while true; do
  something_in_the_background &
done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0
user12a
источник
Не удивительно, что вы создаете много процессов.
Эд Хил
Просить направления для вилочной бомбы?
Баазигар
1
Не могли бы вы рассказать о намерении запустить бесконечный цикл в фоновом режиме?
нейрон

Ответы:

31

С &внутри цикла он начнет новый процесс в фоновом режиме и так быстро , как это может сделать это снова , не дожидаясь первого процесса до конца. Вместо этого я думаю, что вы хотите поместить цикл в фоновый режим, поэтому поместите &цикл как

while /bin/true; do
    something_in_the_background
done &

# more stuff
Эрик Ренуф
источник
10
while : ; do something ; done &
  • Раньше у снарядов Bourne не было trueи falseвстроенных команд. trueвместо этого был просто псевдоним :, и falseчто-то вроде let 0.

  • & в конце строки стола процесс

  • : является пустой командой, как описано в «help:»: No effect; the command does nothing. Exit Status: Always succeeds.
Джон
источник
2
Ваш ответ был бы значительно улучшен, если бы вы его объяснили - ОП может не знать, что :значит, и, вероятно, не знает, почему вы переместили его &до конца. Кроме того, изменение интервала, чтобы сделать его однострочным, просто сбивает с толку - это изменение, которое очень заметно, но совершенно неважно.
Дероберт
Отредактировал пост согласно вашим отзывам
John
0

Установка режима сна, скажем, на 0,1 или 0,01 секунды сделает ваш цикл более дружественным к процессору. Но, как указал Эрик Ренуф, символ & должен находиться в конце цикла, а не внутри него.

daltonfury42
источник