【29.waitコマンド】ざっくりわかる「シェルスクリプト」

waitコマンド

waitコマンド:
waitコマンドは、実行中のプロセスの完了を待機するLinuxの組み込みコマンドです。 waitコマンドは、特定のプロセスIDまたはジョブIDで使用されます。waitコマンドでプロセスIDまたはジョブIDが指定されていない場合、現在のすべての子プロセスが完了するのを待機し、終了ステータスを返します。' wait_example.sh’という名前のファイルを作成し、次のスクリプトを追加します。

#!/bin/bash

echo "Wait command" &
process_id=$!
wait $process_id
echo "Exited with status $?"

bashコマンドでファイルを実行します。

$ bash wait_example.sh
Wait command
Exited with status 0
$

わかりにくいですね。
もう少しわかりやすく説明します。
waitコマンドは、他のプロセスの終了まで待機することができるコマンドです。
例えば、以下三つのファイルを実行します。
末尾に & がついているのは、それぞれの実行ファイルをバックグラウンドで並列で実行させることを意味しています。

#!/bin/bash

bash a.sh &;
bash b.sh &;
bash c.sh &;

では、三つの実行ファイルが全て完了したらコメントを出力するソースに書き直してみます。

#!/bin/bash

bash a.sh &;
bash b.sh &;
bash c.sh &;

echo "終了しました";

上記のソースは、実行の終了を待たずに「終了しました」が出力されます。要するに、コメントの出力は全ての実行を待っていない訳です。正しいソースに書き直してみます。

#!/bin/bash

bash a.sh &;
bash b.sh &;
bash c.sh &;
wait;
echo "終了しました";

上記のようにwaitコマンドを挟むことで、a.sh, b.sh, c.sh の実行が終了してから完了メッセージを表示させることが出来ました。

前の処理終了を待ってから、次の処理を実行する方法は以下の通りです。

#!/bin/bash

command1 &
command2 &
wait
command3

上記の様にすると、command1とcommand2が終了してからcommand3が実行される様にできます。command1と2がバックグラウンドで実行され、waitコマンドで処理終了まで待機し、command3が実行されるといった流れです。

ヒント
waitコマンドと似ているsleepコマンドについて、次の章で説明します。またsleepコマンドとwaitコマンドを組み合わせて並列処理を行うサンプルも次の章で示します。

書籍の紹介

【28.dateコマンド】ざっくりわかる「シェルスクリプト」

【28.dateコマンド】ざっくりわかる「シェルスクリプト」

【30.sleepコマンド】ざっくりわかる「シェルスクリプト」

【30.sleepコマンド】ざっくりわかる「シェルスクリプト」