名前 | 形式 | 機能説明 | 出力 | 環境 | 終了ステータス | 属性 | 関連項目
ジョブ制御が有効なとき、Bourne シェルに組み込まれた jobs は、停止中またはバックグラウンドで実行中の すべてのジョブを表示します。 %job_id を省略すると、停止中またはバックグラウンドで稼動中の すべてのジョブが表示されます。次のオプションを使って、ジョブに関する表示を変更できます。
ジョブのプロセスグループ ID および作業ディレクトリを表示します。
ジョブのプロセスグループ ID のみを表示します。
command または argument 中に見つかった job_id を、対応するプロセスグループ ID に置き換え、command に argument を渡して実行します。
シェルを jsh として呼び出すと、sh の説明で述べたすべての機能に加えて、ジョブ制御が可能になります。通常、ジョブ制御は対話型シェルに対してだけ可能です。通常、非対話型シェルは、ジョブ制御の機能 を使用しません。
ジョブ制御が可能なとき、ユーザーが端末から入力したコマンドまたはパイプラインは、すべて job_id と呼ばれます。どのジョブも、必ずフォアグラウンド、バックグラウンド、または停止のいずれかの状態にあります。 これらの用語の定義を次に示します。
フォアグラウンド状態にあるジョブは、 制御している端末への読み取りおよび 書き込みアクセス権を持っています。
バックグラウンド状態にあるジョブは、 制御している端末への読み取りアクセスを拒否されていますが、 条件付き書き込みアクセス権は持っています (stty(1) を参照)。
停止ジョブは保留状態に置かれたジョブであり、通常は SIGTSTP
シグナルにより、この状態になります (signal(3HEAD) を参照)。
シェルが起動するすべてのジョブには、 ジョブ番号 (job-id number) と呼ばれる正の整数が割り当てられます。シェルはこの番号を把握し、 特定のジョブを示す識別子として使用します。また、シェルは現在 (current) および前回 (previous) のジョブも把握しています。現在のジョブとは、最後に起動または再起動されたジョブです。 前回のジョブとは、その直前のジョブです。
%job_id
job_id は、次のいずれかの形式で指定できます。
現在のジョブ
前回のジョブ
string を含むコマンド行 (一意に表す) に対応したジョブ
ジョブ番号が n のジョブ
コマンド名の先頭が pref のコマンド。 たとえば ls -l name がバックグラウンドで実行中だった場合、% ls と指定すればこのコマンドを示すことができます。pref は、引用符で囲まない限り、空白文字を含めることができません。
ジョブ制御が有効なとき、fg は中断しているジョブの実行を フォアグラウンドで再開します。 またバックグラウンドで実行中のジョブを フォアグラウンドに移動します。%job_id を省略した場合は、 現在のジョブとみなされます。
ジョブ制御が有効なとき、bg は中断されているジョブの実行を バックグラウンドで再開します。%job_id を省略した場合は、 現在のジョブとみなされます。
stop は、job_id を指定して バックグラウンドジョブの実行を中断、または pid (プロセス ID 番号) を指定して すべてのプロセスを中断します (ps(1) を参照 ) 。
C シェルに組み込まれた jobs は、引数なしでジョブ制御下で活動中のジョブを一覧表示します。
通常の情報の他に、プロセス ID を表示します。
シェルは、番号の付いた job_id を各コマンドシーケンスと対応付けて、バックグラウンドで動作中のコマンド、または TSTP シグナル (通常は Control-Z) によって停止したコマンドの動作を追跡します。コマンドまたはコマンドシーケンス (セミコロンで区切られたリスト) をメタキャラクタ & を使用してバックグラウンドで起動した場合、 シェルは角括弧で囲まれたジョブ番号と 関連するプロセス番号のリストを表示します。以下に例を示します。
[1] 1234
ジョブの操作方法については、組み込みコマンド bg、 fg、 kill、 stop、 % の説明を参照してください。
ジョブの参照は `%' で始まります。 パーセント記号だけの指定は、現在のジョブを示します。
現在のジョブ
前のジョブ
`kill -9 %j' のようにジョブ j を参照します。 j はジョブ番号、またはジョブを起動した コマンド行を一意に表す文字列です。 たとえば `fg %vi' は、停止した vi ジョブをフォアグラウンドに移します。
string を含むコマンド行 (一意に表す) に対応したジョブを指定します。
バックグラウンドで動作中のジョブは、端末からの読み取り時に停止します。 バックグラウンドジョブは、通常出力を生成しますが、`stty tostop' コマンドを使用して抑止することも可能です。
fg は現在のジョブまたは指定された job_id をフォアグラウンドへ移します。
bg はバックグラウンドで、現在のジョブ または指定されたジョブを実行します。
stop は、job_id を指定して バックグラウンドジョブの実行を中断、または pid (プロセス ID 番号) を指定して すべてのプロセスを中断します (ps(1) を参照) 。
notify は現在のジョブまたは指定されたジョブの状態が変わったとき、 その旨非同期にユーザーに知らせます。
jobs は、現在のシェル環境で開始されたジョブの状況を表示します。 jobs がジョブの終了を報告したとき、シェルはそのジョブのプロセス ID を、「現在のシェル実行環境で把握しているプロセス ID のリスト」から 削除します。
特定のジョブの報告だけが必要なら、job_id を使ってジョブを指定します。job_id を 1 つも指定しないと、全ジョブに関する情報が出力されます。
以下のオプションは、 jobs の出力を変更または拡張するために使用します。
( 文字のエル ) 個々のジョブに関して詳細な情報を出力します。具体的には、 ジョブ番号、現在のジョブ、プロセスグループ ID 、状態、ジョブを生成したコマンドを出力します。
前回通知を受けた後に停止または終了した ジョブだけを表示します。
選択されたジョブのプロセスグループリーダのプロセスグループ ID だけを出力します。
デフォルトでは、jobs は、停止しているすべてのジョブの状態、実行中のバックグラウンドジョブの 状態、そして状態が変わったのにシェルによりまだ報告されていない すべてのジョブの状態を表示します。
set コマンドの monitor オプションを有効にすると、対話型シェルが job を各パイプラインと関連付けます。 このオプションは、jobs コマンドが表示する現在のジョブのテーブルを維持し、これらのジョブに整数番号を割り当てます。ジョブを & で非同期に起動すると、シェルは、[1] 1234 という形式の行を表示します。 非同期に起動されたジョブはジョブ番号 1 であり、プロセス ID が 1234 であるプロセスが 1 つ (トップレベル) あることを示します。実行中のジョブがあるが、 別に実行したいジョブがある場合、‸Z (Control-Z) キーを押せば、 現在のジョブに STOP シグナルが送信されます。 そうするとシェルは通常、 ジョブが「停止」されたことを示し (後述の「出力」の項を参照)、 プロンプトを表示します。これで、このジョブの状態を bg コマンドでバックグラウンドで処理するか、または他のコマンドを実行してから、 fg というコマンドで ジョブをフォアグラウンドに移すことができます。‸Z は直ちに有効になります。つまり ‸Z は、 保留中の出力や読み取られていない入力が 直ちに中止されるという点で、割り込みに似ています。
シェル内のジョブを参照する方法はいくつかあります。そのジョブのいずれかのプロセスの ID を使っても、また以下のいずれかを使っても参照できます。
number が示す番号のジョブ
コマンド行が string で始まっていたジョブ。履歴ファイルが有効なとき、 この方法は対話モードでのみ使用できます。
コマンド行が string を含んでいたジョブ。履歴ファイルが有効なとき、 この方法は対話モードでのみ使用できます。
現在のジョブ
%% と同じ
直前のジョブ
シェルは、 プロセスの状態が変更すると、 直ちにそれを検出します。 ジョブがブロックされてそれ以上進めない状態になると、 シェルはその旨をユーザーに通知します。 ただし、ユーザーの作業の妨げにならないよう、 この通知はプロンプトを発行する直前にだけ行います。 モニタモードが有効なとき、 完了した各バックグラウンドジョブは、 CHLD に設定されているトラップを起こします。 ジョブの実行中または停止中にシェルを終了しようとすると、 「停止中 (実行中) のジョブがある (`You have stopped (running) jobs.') 」旨の警告を受けます。 jobs コマンドを使用すれば、 どのジョブが該当するのかを確認できます。これを実行するか、 または直ちにシェルを再終了しようとすると、 シェルは 2 度目の警告は出さず、 停止中のジョブは終了します。
fg は、バックグラウンドジョブを、現在の環境からフォアグラウンドへ移します。fg を使ってジョブをフォアグラウンドへ移した場合、そのジョブのプロセス ID は、「現在のシェル実行環境で把握しているプロセス ID のリスト」から 削除されます。fg コマンドが使えるのは、ジョブ制御をサポートするシステム上だけです。指定された各 job をフォアグラウンドで実行します。job_id が指定されないと、 現在のジョブをフォアグラウンドで実行します。
bg は、現在の環境で中断されたジョブを、バックグラウンドジョブとして 実行することにより再開します。 job_id が示すジョブがすでにバックグラウンドジョブを実行している場合、bg は何も行わず正常に終了します。bg を使ってジョブをバックグラウンドへ移した場合、あたかも非同期リストから起動されたかのように、そのジョブのプロセス ID は、「現在のシェル実行環境で把握しているプロセス ID 」の 1 つとなります。 bg コマンドが使えるのは、 ジョブ制御をサポートするシステム上だけです。job_id が省略された場合は、 現在のジョブをバックグラウンドで実行します。
stop は、job_id を指定して バックグラウンドジョブの実行を中断、または pid (プロセス ID 番号 ) を指定して すべてのプロセスを中断します (ps(1) を参照) 。
-p オプションを指定すると、各プロセス ID に対して次に示す 1 行の情報が出力されます。
"%d\n", "process ID"
-p を省略すると、 -l オプションも省略されていれば、以下の形式の一連の行が出力されます。
"[%d] %c %s %s\n", job-number, current, state, command
各フィールドの意味を以下に説明します。
文字 + は、 fg および bg コマンド用のデフォルトとして使用するジョブを表します。 このデフォルトジョブは、 job_id %+ または %% を使って指定することもできます。文字 - は、現在のデフォルトジョブが終了してしまった場合に デフォルトとなるジョブを表します。このジョブは、 job_id %- を使って指定することもできます。 その他のジョブに関しては、このフィールドは空白文字として出力されます。 + や - を使って表せるジョブの数は、どちらも最大 1 つです。停止中のジョブがあれば、現在のジョブも停止ジョブとなります。 停止中のジョブが 2 つ以上あれば、以前のジョブも停止ジョブとなります。
wait 、 fg 、 bg 、 kill の各ユーティリティ用にプロセスグループを識別するのに使用する番号。 これらのユーティリティを使うと、ジョブはジョブ番号の後に % を付加することにより識別できます。
以下の文字列 (POSIX ロケールにある) のいずれかです。
ジョブはシグナルによって中断されておらず、 終了もしていないことを表す。
ジョブは終了して、ゼロの終了ステータスを返したことを表す。
ジョブは正常に終了し、指定されたゼロ以外の終了ステータス (code が示す 10 進数) を返したことを表す。
SIGTSTP
シグナルがジョブを停止したことを表す。
SIGSTOP
シグナルがジョブを停止したことを表す。
SIGTTIN
シグナルがジョブを停止したことを表す。
SIGTTOU
シグナルがジョブを停止したことを表す。
利用者側で、文字列 Stopped の代わりに Suspended を使うよう定義することができます。 ジョブをシグナルが終了した場合、 state の形式は不定ですが、ここに示した他の state 形式とは明確に区別できるものです。その出力上で、 ジョブを終了させたシグナルの名前または説明が与えられます。
シェルに与えられた関連コマンド。
-l オプションを指定すると、プロセスグループ ID を示すフィールドが state フィールドの前に挿入されます。さらに、プロセスグループ内の より多くのプロセスが別の行に出力されることがあります。 その内容は、プロセス ID と command フィールドだけです。
jobs 、 fg 、 bg の実行に影響を与える環境変数 LC_CTYPE 、 LC_MESSAGES 、 NLSPATH についての詳細は、 environ(5) を参照してください。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
使用条件 | SUNWcsu |