Linuxのwaitコマンドを使うことで、プロセスやジョブの終了を待つことができます。
waitコマンドの書式
waitコマンドの書式は以下通りです。
1 |
wait [プロセスID ...] |
引数の数値にはプロセスIDまたはジョブ番号を指定します。ジョブ番号を指定する場合には、番号の前には「%」が必要です。
waitコマンドは指定した指定したプロセス(ジョブ)が終了するまで待ちます。プロセス(ジョブ)を指定しなかった場合は、バックグラウンドで実行しているすべてのプロセスの終了を待ちます。また、複数指定した場合は指定したプロセス(ジョブ)がすべて終了するまで待ちます。
引数なしで実行する
以下のシェルスクリプトでは、command1、command2、command3を同時にバックグラウンドで実行し、その3つのプロセスすべてが終了した後、waitコマンドが実行されcommand4が実行されます。
1 2 3 4 5 6 |
#!/bin/bash command1 & command2 & command3 & wait command4 |
「&」が付加されたコマンドはバックグラウドで同時に実行されます。
プロセスIDまたはジョブ番号を複数指定する
waitコマンドはプロセスID(またはジョブ番号)を複数指定することができます。
以下の例は、command1、command2、command3を同時にバックグラウンドで実行しますが、waitコマンドに指定した2つのプロセス(command1、command2)が終了した時点で、waitコマンドが終了しcommand4が実行されます。この場合、waitはcommand3のプロセス終了を待つことはありません。
1 2 3 4 5 6 7 8 |
#!/bin/bash command1 & pid1=$! # command1のプロセスIDを変数pid1に格納 command2 & pid2=$! # command2のプロセスIDを変数pid2に格納 command3 & wait $pid1 $pid2 # command1、command2の終了を待つ command4 |
このようにwaitコマンドを使用すれば、並列に実行したプロセスを待つことができます。