Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

wait(1)

名前

wait - 他のプロセスの終了を待つ

形式

 

/bin/sh

wait [pid]...

/bin/jsh /bin/ksh88 /usr/xpg4/bin/sh

wait [pid]...
wait [% jobid...]

/bin/csh

wait

ksh

wait [job...]

説明

シェルは、新しいプロセスを作成せずに、シェル自身で wait を実行します。エラーメッセージ cannot fork, too many processes が表示された場合、wait コマンドを使用して、バックグラウンドプロセスをすべてクリアしてください。これを行なっても問題が解決しない場合には、システムのプロセステーブルが一杯になっていること、または実行中のフォアグラウンドプロセスの数が多すぎることが考えられます。ユーザーのログインに対するプロセス ID の数、およびシステムが把握できるプロセスの数には制限があります。

段階以上のパイプラインのプロセスは、必ずしもすべてがシェルの子プロセスであるわけではなく、そのようなプロセスは待つことができません。

/bin/sh, /bin/jsh

プロセス ID が pid であるバックグラウンドプロセスを待ち、そのプロセスの終了ステータスを報告します。pid を省略すると、ユーザーのシェルで現在実行中のバックグラウンドプロセスをすべて待ち、戻り値は 0 になります。ジョブ制御が有効 (jsh) なとき、wait はジョブ識別子の指定を受け入れます。引数の jobid は、先頭にパーセント記号 (%) を付加して指定します。

pid が実行中のプロセス ID でない場合には、wait ユーティリティーはすぐに戻り、戻り値は 0 になります。

csh

バックグラウンドプロセスを待ちます。

ksh88

シェルが非同期リストを開始したとき、非同期リストの各要素内の最後のコマンドのプロセス ID が、現在のシェル実行環境に知らされます。

wait ユーティリティーがオペランドなしで呼び出されると、呼び出し側シェルが認識しているすべてのプロセス ID が終了するまで待ち、終了ステータス 0 で終了します。

認識しているプロセス ID (またはジョブ ID) を示すいくつかの pid または jobid オペランドが指定された場合、wait はすべてのプロセス ID が終了するまで待ちます。認識していないプロセス ID (またはジョブ ID) を示すいくつかの pid または jobid オペランドが指定された場合、wait ユーティリティーはプロセス ID (またはジョブ ID) が終了ステータス 127 で終了した場合と同様に扱います。wait ユーティリティーが戻した終了ステータスは、最後の pid または jobid オペランドで要求したプロセスの終了ステータスです。

認識されたプロセス ID は、現在のシェル実行環境内の wait 呼び出しに対してだけ適用可能です。

ksh

オペランドなしの wait は、呼び出し側シェルが認識しているすべてのジョブが終了するまで待ちます。job オペランドが 1 つ以上指定された場合、wait はそれらすべてが終了するまで待ちます。各 job は、次のいずれかの形式で指定します。

number

number はプロセス ID を意味します。

-number

number はプロセスグループ ID を意味します。

%number

number はジョブ番号を意味します。

%string

名前が string で始まるジョブを意味します。

%?string

名前に string が含まれているジョブを意味します。

%+
%%

現在のジョブを意味します。

%-

前回のジョブを意味します。

1 つ以上の job オペランドに現在のシェル環境で認識されないプロセス ID またはプロセスグループ ID が指定されている場合、wait はそれらを終了ステータス 127 で終了したプロセスと同様に扱います。

オペランド

次のオペランドがサポートされています。

pid

ユーティリティーが停止を待つ対象であるコマンドの符号なし 10 進整数プロセス ID

jobid

待つ対象のバックグラウンドプロセスグループを識別するジョブ制御ジョブ ID。ジョブ制御ジョブ ID 表記は、現在のシェル実行環境内の wait 呼び出しに対してだけ適用可能です。なお pid のジョブ制御ジョブ ID の形式は、ジョブ制御オプションをサポートしているシステム上でだけ使用可能です。

使用法

ほとんどのシステムでは、wait はシェルに組み込まれています。サブシェルや別のユーティリティー実行環境で、次のように wait が呼び出されたとします。

(wait)
nohup wait ...
find . -exec wait ... \;

これらの環境では待つ対象の認識されたプロセス ID がないため、ただちに戻ります。

使用例 1 終端シグナルを識別するスクリプトを使用する

プロセスがシグナルによって停止されたときに使用する正確な値は不定ですが、シグナルがプロセスを停止したことがわかっていれば、以下のようにすると、どのシグナルが 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(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。

終了ステータス

ksh

ksh に組み込まれた wait により、次の終了値が返されます。

0

wait がオペランドなしで呼び出されました。呼び出し側プロセスが認識しているすべてのプロセスが終了しました。

127

job は、現在のシェル環境が認識できないプロセス ID またはプロセスグループ ID である。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
確実
標準
standards(7) を参照してください。

関連項目

csh(1)jobs(1)ksh(1)ksh88(1)sh(1)attributes(7)environ(7)standards(7)