如何在后台运行无限循环

use*_*12a 23 bash

如何在后台运行无限循环,同时继续执行脚本?

示例“脚本”:

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
Run Code Online (Sandbox Code Playgroud)

这(注意&)似乎在短时间内使整个系统崩溃:

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
Run Code Online (Sandbox Code Playgroud)

Eri*_*ouf 40

&循环内部,它将在后台启动一个新进程,并尽可能快地再次执行,而无需等待第一个进程结束。相反,我认为你想把循环放到后台,所以把&循环本身像

while /bin/true; do
    something_in_the_background
done &

# more stuff
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 13

while : ; do something ; done &
Run Code Online (Sandbox Code Playgroud)
  • 早期的 Bourne shell 没有truefalse作为内置命令。true取而代之的是简单地别名为:, 和false类似的东西let 0

  • & 在该行的末尾将过程作为背景

  • : 是空命令,如“help :”所述: No effect; the command does nothing. Exit Status: Always succeeds.

  • 通过解释它,您的答案会得到很大改善——OP 可能不知道 `:` 是什么意思,并且可能不知道为什么将 `&` 移到最后。此外,更改间距以使其成为单行只是令人困惑-这是一种非常明显但完全不重要的更改。 (2认同)