如何在后台运行无限循环,同时继续执行脚本?
“脚本”示例:
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
在&
循环内部,它将在后台启动一个新进程,并尽可能快地再次执行该进程,而无需等待第一个进程结束。相反,我认为您想将循环放入后台,因此将 放在&
循环本身上,就像
while /bin/true; do
something_in_the_background
done &
# more stuff
答案2
while : ; do something ; done &
早期的 Bourne shell 没有
true
andfalse
作为内置命令。true
相反,只是简单地别名为:
, 和false
类似的东西let 0
。&
在该行的末尾背景该过程:
是空命令,如“help :”所述:No effect; the command does nothing. Exit Status: Always succeeds.
答案3
将睡眠时间设置为 0.1 或 0.01 秒将使您的循环对 CPU 更加友好。但正如 Eric Renouf 所指出的, & 应该位于循环的末尾,而不是循环内部。