jobs, fg, bg, stop, notify - プロセスの実行の制御
jobs [-p | -l] [% job_id...]
jobs -x command [arguments]
fg [% job_id...]
bg [% job_id...]
stop % job_id...
stop pid...
jobs [-l]
fg [% job_id]
bg [% job_id]...
notify [% job_id]...
stop % job_id...
stop pid...
jobs [-lnp] [% job_id...]
fg [% job_id...]
bg [% job_id...]
stop % job_id...
stop pid...
jobs [-lnp] [job_id...]
fg [job_id...]
bg [job_id...]
ジョブ制御が有効なとき、Bourne シェルに組み込まれた jobs は、停止中またはバックグラウンドで実行中のすべてのジョブを表示します。%job_id を省略すると、停止中またはバックグラウンドで稼動中のすべてのジョブが表示されます。次のオプションは、jobs の出力を変更または拡張するために使用します。
ジョブのプロセスグループ ID および作業ディレクトリを表示します。
ジョブのプロセスグループ ID のみを表示します。
command または arguments 中に見つかった job_id を、対応するプロセスグループ ID に置き換え、command に argument を渡して実行します。
シェルを jsh として呼び出すと、sh の説明で述べたすべての機能に加えて、ジョブ制御が可能になります。通常、ジョブ制御は対話型シェルに対してだけ可能です。非対話型シェルは、ジョブ制御の機能が追加されても、その恩恵を受けないのが通常です。
ジョブ制御が可能なとき、ユーザーが端末から入力したコマンドまたはパイプラインは、すべて job_id と呼ばれます。どのジョブも、必ず、次のいずれかの状態にあります。フォアグラウンド、バックグラウンド、または停止です。これらの用語の定義を次に示します。
フォアグラウンド状態にあるジョブは、制御している端末への読み取りおよび書き込み権を持っています。
バックグラウンド状態にあるジョブは、制御している端末への読み取りアクセスを拒否されていますが、条件付き書き込みアクセス権は持っています (stty(1) を参照)。
停止ジョブは中断状態に置かれたジョブであり、通常は SIGTSTP シグナルにより、この状態になります (signal.h(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
現在のジョブリストを見るには、組み込みコマンド jobs を使用します。最後に停止したジョブ (停止したジョブがない場合は、最後にバックグラウンドに投入されたジョブ) を「現在のジョブ」といい、`+' で示します。前のジョブは `–' で示します。現在のジョブが終了したりフォアグラウンドに移された場合、前のジョブが新しく現在のジョブになります。
ジョブを操作するには、組み込みコマンド bg、fg、kill、stop、および % を使用します
ジョブの参照は `%' で始まります。パーセント記号だけの指定は、現在のジョブを示します。
現在のジョブ。
前のジョブ。
次のようにしてジョブ j を参照します。`kill –9 %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 はただちに有効になります。つまり、保留中の出力や読み取られていない入力がただちに中止されるという点で、割り込みに似ています。
シェル内のジョブを参照する方法はいくつかあります。そのジョブのいずれかのプロセスの ID を使っても、また次のいずれかを使っても参照できます。
指定された番号のジョブ。
コマンド行が string で始まっていたジョブ。履歴ファイルが有効なとき、この方法は対話モードでのみ使用できます。
コマンド行が string を含んでいたジョブ。履歴ファイルが有効なとき、この方法は対話モードでのみ使用できます。
現在のジョブ
%% と同等
直前のジョブ
シェルは、プロセスの状態が変更されると、ただちにそれを検出します。ジョブがブロックされてそれ以上進めない状態になると、プロンプトを発行する直前にだけ、シェルはその旨をユーザーに通知します。これは、ユーザーの作業の妨げにならないようにするためです。モニタモードが有効なとき、完了した各バックグラウンドジョブは、CHLD に設定されているトラップを起こします。ジョブの実行中または停止中にシェルを終了しようとすると、「停止中 (実行中) のジョブがある (`You have stopped (running) jobs.')」旨の警告を受けます。jobs コマンドを使用すれば、どのジョブが該当するのかを確認できます。これを実行するか、またはただちにシェルを再終了しようとすると、シェルは 2 度目の警告は出さず、停止中のジョブは終了します。
fg は、バックグラウンドジョブを、現在の環境からフォアグラウンドへ移します。fg を使ってジョブをフォアグラウンドへ移した場合、そのジョブのプロセス ID は、現在のシェル実行環境で把握しているプロセス ID のリストから削除されます。fg コマンドが使えるのは、ジョブ制御をサポートするシステム上だけです。job_id が指定されないと、現在のジョブをフォアグラウンドで実行します。
bg は、現在の環境で中断されたジョブを、バックグラウンドジョブとして実行することにより再開します。job_id が示すジョブがすでにバックグラウンドジョブを実行している場合、bg は何も行わず正常に終了します。bg を使ってジョブをバックグラウンドへ移した場合、あたかも非同期リストから起動されたかのように、そのジョブのプロセス ID は、「現在のシェル実行環境で把握しているプロセス ID」の 1 つとなります。bg コマンドが使えるのは、ジョブ制御をサポートするシステム上だけです。job_id が省略された場合は、現在のジョブをバックグラウンドで実行します。
stop は、job_id を指定してバックグラウンドジョブの実行を中断、または pid (プロセス ID 番号) を指定してすべてのプロセスを中断しますps(1) を参照してください。
jobs は、現在のシェル環境によって開始された、指定されたジョブに関する情報を標準出力で表示します。情報には、[...] で囲まれたジョブ番号、ステータス、およびジョブを開始したコマンド行が含まれます。
job_id を省略した場合、jobs は、停止されたすべてのジョブ、バックグラウンドジョブ、およびシェルによる最後の報告以降にステータスが変更されたすべてのジョブのステータスを表示します。
jobs がジョブの終了ステータスを報告したとき、シェルはそのジョブを、現在のシェル環境で把握しているジョブのリストから削除します。
次のオプションは、jobs の出力を変更または拡張するために使用します。
通常の情報に加えて、プロセス ID をジョブ番号のあとに表示します。
最後のプロンプトが表示されてからステータスが変更されたジョブのみを表示します。
指定されたジョブのプロセスグループリーダーの ID を表示します。
job_id は、次のいずれかの形式で jobs、fg、および bg に対し指定できます。
job のプロセス ID。
job のプロセスグループ ID。
ジョブ番号。
名前が string で始まるジョブ。
名前に string が含まれるジョブ。
現在のジョブ。
前のジョブ。
fg は、指定されたジョブをフォアグラウンドに順に移行し、CONT 信号を送信してそれぞれの実行を開始します。job_id を省略した場合、最後に開始または停止されたバックグラウンドジョブがフォアグラウンドに移行されます。
bg は、指定されたジョブをバックグラウンドに移行し、CONT 信号を送信してそれらの実行を開始します。job_id を省略した場合、最後に開始または停止されたバックグラウンドジョブがバックグラウンドで再開または続行されます。
–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 ロケールにある次の文字列のいずれかです。
ジョブはシグナルによって中断されておらず、終了もしていないことを表します。
ジョブは終了して、ゼロの終了ステータスを返したことを表します。
ジョブは正常に終了し、指定された 0 以外の終了ステータス (code が示す 10 進数) を返したことを表します。
ジョブが停止されたことを表します。
SIGTSTP シグナルがジョブを停止したことを表します。
SIGSTOP シグナルがジョブを停止したことを表します。
SIGTTIN シグナルがジョブを停止したことを表します。
SIGTTOU シグナルがジョブを停止したことを表します。
利用者側で、文字列 Stopped の代わりに Suspended を使うよう定義できます。ジョブをシグナルが終了した場合、state の形式は不特定ですが、ここに示したほかの state 形式とは明確に区別できるものです。その出力上で、ジョブを終了させたシグナルの名前または説明が与えられます。
シェルに与えられた関連コマンド。
–l オプションを指定すると、プロセスグループ ID を示すフィールドが state フィールドの前に挿入されます。さらに、プロセスグループ内のより多くのプロセスが別の行に出力されることがあります。その内容は、プロセス ID と command フィールドだけです。
jobs、fg、bg の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
jobs、fg、bg は、次の終了値を返します。
正常終了。
エラーが発生した。
jobs は、次の終了値を返します。
各ジョブの情報が標準出力に書き込まれました。
1 つ以上のジョブが存在しません。
fg は、次の終了値を返します。
1 つ以上のジョブがフォアグラウンドに移行されました。
1 つ以上のジョブが存在しないか、完了していません。
bg は、次の終了値を返します。
すべてのバックグラウンドジョブが開始されました。
1 つ以上のジョブが存在しないか、バックグラウンドジョブが存在しません。
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
|
csh(1), kill(1), ksh(1), ksh88(1), ps(1), sh(1), shell_builtins(1), stop(1), stty(1), wait(1), signal.h(3HEAD), attributes(7), environ(7), standards(7)