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


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

Не удивительно, что вы создаете много процессов.
Эд Хил

Просить направления для вилочной бомбы?
Баазигар

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 секунды сделает ваш цикл более дружественным к процессору. Но, как указал Эрик Ренуф, символ & должен находиться в конце цикла, а не внутри него.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.