シェルスクリプトで任意のプロセスの終了を待って、別のコマンドを実行させる方法(ループ無し)
はじめに
プロセスIDが特定できているが、このプロセスが終了したことを確認して次の処理を実行させたい場合にどうするのがよいでしょう?
プロセス終了を持って、Macの通知バーにメッセージを表示させたかったのですが、 while
ループと sleep
コマンドでプロセス終了を監視する以外にうまい方法がないかを調べてみました。
検証環境
tailコマンドに便利なオプションがあった!
tail
コマンドのマニュアルにぴったりなオプションがありました。
該当のプロセスIDの処理が終了するまで tail -f
を続けてくれるオプションになります。
ただし、今回は tail
したいファイルはありませんので、ちょっとしたコツが必要です。
試してみる
まずはターミナルを開き、以下のようなファイルを作成します。
実行します。1秒おきに .
が出力されるはずです。
別のターミナルを開き、以下のコマンドを実行します。test.sh
コマンドを実行中のプロセスのPIDが出力されます。
プロセスIDがわかったので、このプロセスの終了を待ち、終了後に任意のコマンド(ここでは echo
)を実行させてみます。
監視対象のファイルはありませんが、 --pid
オプション指定時には -f
オプションが必須ということでビットバケツを指定しています。
さて、この状態でもとのターミナルに戻り、コマンドを終了させます。(Ctrl + C
をタイプ)
監視中のターミナルで echo
コマンドが実行されるはずです。
ひとこと
echo
の代わりに terminal-notifier を組み合わせると、息の長いコマンドを実行してしまったあとで、簡単に終了通知を設定することができます。
ディスカッション
コメント一覧
まだ、コメントがありません