#navi(../)
* 複数のプロセスが終了するまで待機する・waitコマンド [#z36d5602]
シェルの組込みコマンドであるwaitコマンドを使用すると、バックグラウンドで起動したプロセスが終了するまで待機するようになります。~
以下にwaitコマンドを使用した例を記します。~
本資料では、CentOSを使用しシェルはbashを利用しました。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 関連記事 [#x0e95f02]
-[[seqコマンドの桁あわせ>逆引きUNIXコマンド/seqコマンドの桁あわせ]]
-[[開始値から終了値までの数値を出力する方法・seqコマンド>逆引きUNIXコマンド/開始値から終了値までの数値を出力する方法・seqコマンド]]
-[[実行するシェルスクリプト名を取得する・basenameコマンド>逆引きシェルスクリプト/実行するシェルスクリプト名を取得する]]
* whichでみつからないwaitコマンド [#x3da3d9b]
waitコマンドはシェルの組込みコマンドなのでwhichでwaitコマンドのありかを探してもみつかりません。~
$ which wait
/usr/bin/which: no wait in (/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/sakura/bin)
* waitコマンドを使用した簡単なシェルスクリプトで実験 [#g5d58d31]
親(parent.sh)と子のシェルスクリプト(child.sh)を2つ作成しました。~
parent.shからchild.shを複数バックグラウンドで起動(&を付けてバックグランドで起動)しwaitでchild.shが終了するのwaitで待ちます。~
バックグランドで動作していたchild.shが全て終了するとparent.shが終了メッセージを表示します。~
以下に2つのシェルを記します。
** waitコマンド動作確認用シェルスクリプト [#bf62d27f]
以下にwatiコマンド動作確認用シェルスクリプトを記します。
- parent.sh
#ref(parent.sh)
#!/bin/bash
./child.sh sakura 3 &
./child.sh tsubaki 2 &
./child.sh suzuran 1 &
wait
echo script is finished.
#br
parent.shは、child.shをバックグラウンドで起動します。~
1つ目の引数は画面に表示する文字列、2つ目の引数は繰り返しの回数になります。~
本スクリプトでは、child.shを3つ起動しています。
- child.sh
#ref(child.sh)
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: `basename $0` <message> <repeat count>"
exit 1
fi
for i in `seq 1 $2`
do
echo $1
sleep 1
done
exit 0
#br
child.shは、1つ目の引数をechoで表示し、2つ目の引数分echoを繰り返します。~
表示後sleepにより1秒停止します。
** waitコマンド動作確認用シェルスクリプトを動かしてみる [#u0c80871]
parent.shを起動すると以下のように出力されます。~
出力結果だけを見るとwaitコマンドの動作がわからないのですが、以下の出力は3つのchild.shプロセスが1つ目の引数を表示したあと、1秒停止します。~
2つ目の引数分、メッセージを表示しています。~
3つのchild.shが終了したらscript is finishedが表示されます。
$ chmod +x parent.sh child.sh
$ ./parent.sh
sakura
tsubaki
suzuran
sakura
tsubaki
sakura
script is finished.
以上、シェルの組込みコマンドであるwaitコマンドについての記事でした。
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)