スクリプトの実行中にバックグラウンドで無限ループを実行するにはどうすればよいですか?
「スクリプト」の例:
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 &
true
初期のBourneシェルには組み込みfalse
コマンドがありませんでした。true
代わりに単にalias:
のfalse
ようなものを使用してくださいlet 0
。&
行末のプロセスを背景にします。:
"help:" で説明されているように空のコマンドです。No effect; the command does nothing. Exit Status: Always succeeds.
答え3
スリープ時間を0.1秒または0.01秒に設定すると、ループはCPUに優しくなります。しかし、Eric Renoufが指摘したように、&はループの内側ではなくループの最後になければなりません。