シェルスクリプトで非同期whileループを停止する

シェルスクリプトで非同期whileループを停止する

特定の条件が満たされるまでプロセスを再開する非同期whileループがあります。これは次のとおりです。

(while [ "$check_condition" -eq 1 ]; do
    ./async_command
done) &

... # do some stuff

check_condition=0
pkill -9 async_command

ご覧のとおり、check_condition0に変更してまだ実行中の非同期プロセスを終了しました。問題は、whileループが実行され続け、プロセスが再起動されることです。

私はループがcheck_condition開始後にのみ値を登録し、どんな変更も気付かないと思います。

この問題をどのように解決できますか?

ベストアンサー1

kill $!バックグラウンドで実行されている最後のプロセスを終了する必要があります。バラよりBashスクリプトで「$!」とはどういう意味ですか?

バックグラウンドで別のコマンドを実行している場合は、そのPIDを変数に保存し、$!後でそのIDを使用して必要に応じてプロセスを終了できます。

( while ... done ) & pid=$!

それから

kill $pid

または、jobs実行中のバックグラウンドプロセスを確認し、そのIDを使用して終了します。

kill %Id

また、見ることができますバックグラウンドプロセスを終了するには?

おすすめ記事