バックグラウンドプロセス発行して自前の多重処理を組む
UNIXのwhileはこんな感じで書く。
while [ 判定文 ]
do
#処理を記述
done
while :
do
#処理を記述
done
後者の方は判定文がないので無限ループになる。
意図的に中でbreakしないと抜けられない。
ただ個人的にはよく後者の方を使う。
本題の「自前の多重処理」は無限ループの方を応用して下記のように記述する
sh ./test1.sh &
sh ./test2.sh &
sh ./test3.sh &
while :
do
# 実行中プロセス数をカウント
cnt=`ps -efa | grep -e test1 -e test2 -e test3 | grep -v grep | wc -l`
if [ $cnt -ne 0 ]; then
# 実行中プロセスがまだあるなら10秒まつ
sleep 10
else
# 実行中プロセスがもうないなら抜ける
break
fi
done
要するにタイトルにあるように
バックグラウンドプロセスを投げるだけ投げて先に進み、
後で無限ループしながら対象のプロセスを監視するやり方。
プロセスがなくなったら抜けて終了。
ただsleepする分、実際にすべての処理が終わったタイミングと
この親shそのものが終わるタイミングは微妙にずれる。