可変時間(2分以内)で実行されるプログラムがあり、あまり迷惑にならないように幸運なメッセージを追加しました。
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
しかし、プログラムの持続時間は(ここでは関連していない要因によって)変わる可能性があり、停止メッセージが必要です。
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
if [any-condition]; Then
#script is over... Stop messages!!!
fi
...
if [any-condition]; Then
#Stop messages... script continue execution
fi
... Blah blah
...
#script is over stop Messages!
そのため、3秒間に45個のメッセージを準備すると、プログラムはすぐに終了することができますが、端末にはまだメッセージが表示され、他の作業が妨げられます。
コマンドを試しましたが、jobs
バックグラウンドには何もありません。コマンドを試しましたが、ps
メッセージ操作が見つかりませんでした。
この幸運のメッセージをどのように防ぐことができますか?
ベストアンサー1
最も簡単な方法はを使用することです$!
。これはバックグラウンドで開始された最後のプロセスのPIDですman bash
。
!
非同期コマンドとして実行されるか、bg組み込みコマンドを使用して、最近バックグラウンドに追加されたジョブのプロセスIDに展開されます。
したがって、次のようにすることができます。
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
pid=$!
[ main script here]
if [any-condition]; then
kill $pid
fi
しかし、私はこれが仕事をするやや複雑な方法だとは思わないかもしれません。完全なスクリプトを表示すると、より具体的な例を提示できますが、次のようなことはなぜできませんか?
long_process &
while ps -p $! >/dev/null; do sleep 3; echo; echo; fortune; done
これにより、時間がかかり、fortune
終了するまで実行されるすべてのプロセスを開始できます。