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