バックグラウンドジョブの変更および/または起動後のジョブ完了通知

バックグラウンドジョブの変更および/または起動後のジョブ完了通知

何らかの方法で実行中のコマンドを変更したり、実行中のコマンドが完了したときに通知を受け取ることを望みます。後ろにすでに始まっています。

通常、コマンドの実行に時間がかかることがわかったら、事前にいくつかの通知を設定します。

./takes_long_time && touch done

または

./takes_long_time; touch done

私の質問は、./takes_long_timeなしで実行された場合、touch再起動せずに戻って追加する方法はありますか./takes_long_time

答え1

もう少し検索してみました解決策:

$ ./takes_long_time
<ctrl-z>
[1]+  Stopped ./takes_long_time

$ fg && touch done

どのように使用するかによって、いくつかの注意があります(fg; touch done望ましくない結果が生じる可能性があります。リンクされた投稿を参照してください)。

fg | grep somethingさらに、パイプ()の追加などの操作は実行できませんが、これは理解できる制限です。

答え2

おそらく ./takes_long_time バックグラウンドに置く必要があります。

変える

./takes_long_time && touch done

する

./takes_long_time &

./takes_long_timeこれはバックグラウンドで実行されます。その後は実行できます./takes_long_time。したがって、バックグラウンドで2つのプロセスが実行されます。

コマンドが完了したかどうかを知る非伝統的な方法は次のとおりです。

if command_line; then 
    echo "It is done"
fi

はい

if sleep 5; then 
echo "Finish sleeping for 5 seconds"
fi

関連情報