如何在后台运行无限循环


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

不用担心,您正在创建许多流程。
Ed Heal

问问叉炸弹的方向吗?
Baazigar

1
您能告诉我在后台运行无限循环的意图吗?
神经元

Answers:


31

&循环内部,它将在后台启动新进程,并且它可以尽快完成新进程,而无需等待第一个进程结束。相反,我认为您想将循环放到后台,所以将&循环本身放到

while /bin/true; do
    something_in_the_background
done &

# more stuff

10
while : ; do something ; done &
  • 此前的Bourne shell没有truefalse内置的命令。true取而代之的是,只是简单地别名为:false类似let 0

  • & 在行的末尾为背景

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

2
通过解释它,您的答案将得到极大的改进-OP可能不知道这:意味着什么,并且可能不知道您为何将其&移至最后。另外,更改间距以使其成为单线也很令人困惑-这是一个非常明显但完全不重要的更改。
derobert

根据您的评论编辑了帖子
约翰·约翰·约翰(John)

0

将睡眠时间设置为.1或.01秒将使您的循环对CPU更加友好。但正如Eric Renouf所指出的,&应该在循环的结尾,而不是在循环的内部。

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.