シェルの組込みコマンドであるwaitコマンドを使用すると、バックグラウンドで起動したプロセスが終了するまで待機するようになります。
以下にwaitコマンドを使用した例を記します。
本資料では、CentOSを使用しシェルはbashを利用しました。
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)
親(parent.sh)と子のシェルスクリプト(child.sh)を2つ作成しました。
parent.shからchild.shを複数バックグラウンドで起動(&を付けてバックグランドで起動)しwaitでchild.shが終了するのwaitで待ちます。
バックグランドで動作していたchild.shが全て終了するとparent.shが終了メッセージを表示します。
以下に2つのシェルを記します。
以下にwatiコマンド動作確認用シェルスクリプトを記します。
#!/bin/bash ./child.sh sakura 3 & ./child.sh tsubaki 2 & ./child.sh suzuran 1 & wait echo script is finished.
#!/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
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コマンドについての記事でした。