バックグラウンドプロセス発行して自前の多重処理を組む


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そのものが終わるタイミングは微妙にずれる。