シミュレーションが終わるのを待って次のシミュレーションを回したり、メールをとばしたりするために、
特定のプロセスが終了するのを検知する方法です。
同じシェル内のバックグラウンドプロセスならwait
コマンドが使えますが、
別シェルのプロセスを監視する場合は他の方法が必要です。
ループを使う方法
while ps -p XXXX > /dev/null; do sleep 60; done; echo "end"
XXXXは監視するプロセスのPID。
原理としては無限ループを回しておいて、プロセスが終了したらループを抜けるようにしています。
ps
コマンドの-p
オプションでプロセスを指定すると、プロセスがあれば、終了ステータスが0で終わり、ループが続きます。
プロセスがなければ(監視しているプロセスが終了していれば)ループを抜けて次のコマンドが実行されます。
tailコマンドを使う方法
コメント欄で別のやり方も教えていただきました。
tail -f /dev/null --pid=XXXX; echo "end"
--pidオプションが指定されたPIDのプロセスが終了した時点でtailコマンドも終了することを利用しています。
※こちらはGNU系のtailが必要です。
Linuxは問題なく使えますが、macOSなどのBSD系のtailでは--pidオプションがないため、1つ目の方法を使ってください。
また、この方法は指定したプロセスが標準出力をファイル等にリダイレクトしている場合はうまく動作しなさそうです。