特定の条件が満たされるまでプロセスを再開する非同期whileループがあります。これは次のとおりです。
(while [ "$check_condition" -eq 1 ]; do
./async_command
done) &
... # do some stuff
check_condition=0
pkill -9 async_command
ご覧のとおり、check_condition
0に変更してまだ実行中の非同期プロセスを終了しました。問題は、whileループが実行され続け、プロセスが再起動されることです。
私はループがcheck_condition
開始後にのみ値を登録し、どんな変更も気付かないと思います。
この問題をどのように解決できますか?
ベストアンサー1
kill $!
バックグラウンドで実行されている最後のプロセスを終了する必要があります。バラよりBashスクリプトで「$!」とはどういう意味ですか?
バックグラウンドで別のコマンドを実行している場合は、そのPIDを変数に保存し、$!
後でそのIDを使用して必要に応じてプロセスを終了できます。
( while ... done ) & pid=$!
それから
kill $pid
または、jobs
実行中のバックグラウンドプロセスを確認し、そのIDを使用して終了します。
kill %Id
また、見ることができますバックグラウンドプロセスを終了するには?