waitコマンドは、
シェルスクリプトにおけるバックグラウンドプロセスの実行完了を待機する、重要な組み込みコマンドです。このコマンドは、特に複数のプロセスを並行して実行するスクリプトにおいて、プロセスの実行順序を制御し、同期を取るために不可欠な役割を果たします。
Bourne シェルにおけるwaitコマンド
Bourne
シェルでは、waitコマンドは次のように使用されます。
bash
wait [n]
ここで`n`は、待機したいバックグラウンドプロセスのプロセスID(PID)またはジョブIDを指定します。`n`が省略された場合、waitコマンドは
シェルが管理する全てのバックグラウンドプロセスが終了するまで待機します。
waitコマンドは、通常、最後に終了したジョブの
終了ステータスを返します。しかし、指定されたジョブが存在しない場合や、待機すべきジョブがない場合は、127を返すことがあります。waitコマンドは、現在の
シェルの実行環境のジョブテーブルを参照する必要があるため、通常は
シェル組み込みコマンドとして実装されています。
waitコマンドの利用例
waitコマンドは、スクリプトの一部を並列で実行し、後続の部分が前の部分の完了に依存するような場合に非常に役立ちます。以下に、その利用例を示します。
例えば、`inoa`という名前のホストから`src/`ディレクトリを`rsync`で取り込み、同時に必要なライブラリを更新し、最後にそれらを組み合わせてビルドを実行する場合を考えます。この場合、`rsync`とライブラリ更新をバックグラウンドで実行し、その完了を待ってからビルドを実行することができます。
bash
rsync -av inoa:/path/to/src/ src/ & # rsyncをバックグラウンドで実行
update_library & # ライブラリの更新をバックグラウンドで実行
wait # 両方の処理が完了するまで待機
build # ビルドを実行
この例では、`rsync`と`update_library`が同時に実行され、`wait`コマンドによって、これらの処理が完了するまでスクリプトは一時停止します。その後、`build`コマンドが実行されます。
Cシェルにおけるwaitコマンド
C
シェルでは、waitコマンドはよりシンプルに、次のように使用されます。
csh
wait
この形式では、全てのバックグラウンドジョブの終了を待機します。C
シェルでは、特定のジョブを待機する機能は提供されていません。
waitコマンドの重要性
waitコマンドは、
シェルスクリプトにおける並行処理を管理し、プロセスの同期を確実にする上で重要な役割を果たします。これにより、複数のプロセスが互いに依存する場合でも、データの整合性を保ちながらスクリプトを実行することができます。
関連項目
Wait (operating system): オペレーティングシステムにおけるプロセス同期の概念について
外部リンク
GNU bash reference manual(英語)
wait(1) シェル・コマンド man page(SunOS リファレンスマニュアル)
wait(1) シェル・コマンド man page(HP-UX リファレンス)
wait(2) システム・コール man page(Solaris 9 Reference Manual Collection)(英語)
wait(2) システム・コール man page(HP-UX リファレンス)