バックグラウンドで無限ループを実行する方法

バックグラウンドで無限ループを実行する方法

スクリプトの実行中にバックグラウンドで無限ループを実行するにはどうすればよいですか?

「スクリプト」の例:

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が指摘したように、&はループの内側ではなくループの最後になければなりません。

関連情報