next up previous contents index
Next: 4.9 スクリプトと変数 Up: 4. シェルを利用する Previous: 4.7 コマンドラインの編集


     
4.8 ジョブ管理

基本的にシェルは1つのコマンドが実行されると,そのコマンドの終了を待ち 続ける.その間,プロンプトは表示されないので次のコマンドの入力はできな い.同じシェルで複数のコマンドを並列して処理するためには,あらかじめ, 実行するコマンドに``&''をつけて実行する必要がある. ``&''をつけて実行されたコマンドはバックグラウンドジョブと呼ば れ,コマンドの終了を待たずにプロンプトが表示される.

        
4.8.1 フォアグラウンドとバックグラウンド

コマンド名を入力して<RET> を押すと,プロンプトはコマンドの処理が 終わるまで表示されなくなる.このようにシェルと対話式に処理していくジョ ブを,``フォアグラウンドジョブ''という.次の例では,エディタであるMule ()を起動するコマンドを実行しているが,このMuleはフォア グラウンドジョブで行っているため,Muleを終了するまでプロンプトが表示さ れず,他のコマンドを実行できない.

% mule<RET>
_
これに対して,コマンドの処理が終わるまで待たずにプロンプトを表示するよ うな実行の仕方を,``バックグラウンドジョブ''という.コマンドをバックグ ラウンドジョブとして起動するには,コマンドの後に``&''をつけて 実行する.

 次の例では,バックグラウンドジョブでMuleを起動しているため,Muleを使い ながら他のコマンドを実行できる.フォアグラウンドジョブとして実行できる ジョブは1つだけだが,バックグラウンドジョブで実行することで,複数のジョ ブを同時に実行できる.

% mule &<RET>
[1] 15895
% _
フォアグラウンドジョブとバックグラウンドジョブには,いくつかの違いがあ る.フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は, どちらも表示される.しかし,シェルから情報を入力できるのは,フォアグラ ウンドジョブのみである.ユーザがシェルから数値やファイル名などの情報を 起動後に入力するようなジョブがバックグラウンドジョブとして実行されてい た場合,そのジョブがフォアグラウンドになるまで処理が中断されてしまう.

4.8.2 ジョブの状態を知る -- jobs

 

シェルが現在実行しているジョブの情報を知るには,jobsコマンドを用 いる.

% jobs<RET>
[1]  - Running                xclock
[2]  + Suspended              less /home/s98000hf/file3
[3]    Running                xbiff
% _
左端の[ ]の中の数字は,ジョブ番号といい,シェルがジョブを処理す る際にジョブにつける番号である.ジョブを操作するコマンドは,すべてこの ジョブ番号を指定して行う.その他の表示の意味を表に示 す.


 
表: jobsコマンドの出力
 
表示 意味
左端の[ ]内の数字 ジョブ番号
Running バックグラウンドジョブ
Suspended 一時停止中のジョブ
+ currentジョブ(フォアグラウンドで最後に実行されたジョブ)
- previousジョブ(currentジョブの前に実行されたジョブ)

     
4.8.3 ジョブの操作

ジョブの操作には,表のようなコマンドを用いる.


 
表: ジョブ操作
  
コマンド 意味
fg バックグラウンドからフォアグラウンドへの切り替え
bg サスペンドしていたジョブをバックグラウンドで実行する
kill ジョブを終了する

いずれもジョブ番号を%の後に引数として実行する対象を指定する. ジョブ番号が省略された場合,killコマンド以外はcurrentジョブが対 象となる.

   
4.8.4 強制終了とサスペンド

     

実行中のフォアグラウンドジョブを強制終了するには,C-cを押す.ま た,C-zを押すと,フォアグラウンドで実行されているジョブをサスペ ンド(一時中断)できる.さらに,サスペンドしたジョブはfgbg などのコマンドで復帰する.例えばバックグラウンドで起動するジョブを間違 えてフォアグラウンドで起動してしまったときに,1度サスペンドをしてbgコマンドを実行することで,バックグラウンドジョブに切り替えられる.

% jobs<RET>
[1]  - Running                xclock
[2]  + Running                xdvi report.dvi
% fg %1<RET>
<C-z>
^Z
Suspended
% jobs<RET> 
[1]  + Suspended              xclock
[2]  - Running                xdvi report.dvi
% bg %1<RET>
[1]    Running                xclock
[2]  + Running                xdvi report.dvi
% fg %2<RET>
<C-c>
^C
% jobs<RET>
[1]    Running                xclock
% _


多数のジョブをサスペンドしたままにしておくと,ホストに大きな負荷がかかっ てしまうのでサスペンドは必要に応じて使うこと.