wait - 他のプロセスの終了を待つ
wait [pid]...
wait [pid]...
wait [% jobid...]
wait
wait [job...]
シェルは、新しいプロセスを作成せずに、シェル自身で wait を実行します。エラーメッセージ cannot fork, too many processes が表示された場合、wait コマンドを使用して、バックグラウンドプロセスをすべてクリアしてください。これを行なっても問題が解決しない場合には、システムのプロセステーブルが一杯になっていること、または実行中のフォアグラウンドプロセスの数が多すぎることが考えられます。ユーザーのログインに対するプロセス ID の数、およびシステムが把握できるプロセスの数には制限があります。
段階以上のパイプラインのプロセスは、必ずしもすべてがシェルの子プロセスであるわけではなく、そのようなプロセスは待つことができません。
プロセス ID が pid であるバックグラウンドプロセスを待ち、そのプロセスの終了ステータスを報告します。pid を省略すると、ユーザーのシェルで現在実行中のバックグラウンドプロセスをすべて待ち、戻り値は 0 になります。ジョブ制御が有効 (jsh) なとき、wait はジョブ識別子の指定を受け入れます。引数の jobid は、先頭にパーセント記号 (%) を付加して指定します。
pid が実行中のプロセス ID でない場合には、wait ユーティリティーはすぐに戻り、戻り値は 0 になります。
バックグラウンドプロセスを待ちます。
シェルが非同期リストを開始したとき、非同期リストの各要素内の最後のコマンドのプロセス ID が、現在のシェル実行環境に知らされます。
wait ユーティリティーがオペランドなしで呼び出されると、呼び出し側シェルが認識しているすべてのプロセス ID が終了するまで待ち、終了ステータス 0 で終了します。
認識しているプロセス ID (またはジョブ ID) を示すいくつかの pid または jobid オペランドが指定された場合、wait はすべてのプロセス ID が終了するまで待ちます。認識していないプロセス ID (またはジョブ ID) を示すいくつかの pid または jobid オペランドが指定された場合、wait ユーティリティーはプロセス ID (またはジョブ ID) が終了ステータス 127 で終了した場合と同様に扱います。wait ユーティリティーが戻した終了ステータスは、最後の pid または jobid オペランドで要求したプロセスの終了ステータスです。
認識されたプロセス ID は、現在のシェル実行環境内の wait 呼び出しに対してだけ適用可能です。
オペランドなしの wait は、呼び出し側シェルが認識しているすべてのジョブが終了するまで待ちます。job オペランドが 1 つ以上指定された場合、wait はそれらすべてが終了するまで待ちます。各 job は、次のいずれかの形式で指定します。
number はプロセス ID を意味します。
number はプロセスグループ ID を意味します。
number はジョブ番号を意味します。
名前が string で始まるジョブを意味します。
名前に string が含まれているジョブを意味します。
現在のジョブを意味します。
前回のジョブを意味します。
1 つ以上の job オペランドに現在のシェル環境で認識されないプロセス ID またはプロセスグループ ID が指定されている場合、wait はそれらを終了ステータス 127 で終了したプロセスと同様に扱います。
次のオペランドがサポートされています。
ユーティリティーが停止を待つ対象であるコマンドの符号なし 10 進整数プロセス ID
待つ対象のバックグラウンドプロセスグループを識別するジョブ制御ジョブ ID。ジョブ制御ジョブ ID 表記は、現在のシェル実行環境内の wait 呼び出しに対してだけ適用可能です。なお pid のジョブ制御ジョブ ID の形式は、ジョブ制御オプションをサポートしているシステム上でだけ使用可能です。
ほとんどのシステムでは、wait はシェルに組み込まれています。サブシェルや別のユーティリティー実行環境で、次のように wait が呼び出されたとします。
(wait) nohup wait ... find . -exec wait ... \;
これらの環境では待つ対象の認識されたプロセス ID がないため、ただちに戻ります。
プロセスがシグナルによって停止されたときに使用する正確な値は不定ですが、シグナルがプロセスを停止したことがわかっていれば、以下のようにすると、どのシグナルが kill を使用しているかをかなり正確に特定できます (/bin/ksh88 および /usr/xpg4/bin/sh)。
sleep 1000& pid=$! kill -kill $pid wait $pid echo $pid was terminated by a SIG$(kill -l $(($?−128))) signal.使用例 2 プロセスの終了ステータスを戻す
以下のコマンドが 31 秒未満で実行されたとします (/bin/ksh88 および /usr/xpg4/bin/sh)。
sleep 257 | sleep 31 & jobs -l %%
その場合、次のコマンドのどちらかが 2 番目の sleep の終了ステータスを戻します。
wait <pid of sleep 31> wait %%
wait の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
ksh に組み込まれた wait により、次の終了値が返されます。
wait がオペランドなしで呼び出されました。呼び出し側プロセスが認識しているすべてのプロセスが終了しました。
job は、現在のシェル環境が認識できないプロセス ID またはプロセスグループ ID である。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
csh(1), jobs(1), ksh(1), ksh88(1), pwait(1), sh(1), attributes(5), environ(5), standards(5)