基本的にシェルは1つのコマンドが実行されると,そのコマンドの終了を待ち
続ける.その間,プロンプトは表示されないので次のコマンドの入力はできな
い.同じシェルで複数のコマンドを並列して処理するためには,あらかじめ,
実行するコマンドに``&
''をつけて実行する必要がある.
``&
''をつけて実行されたコマンドはバックグラウンドジョブと呼ば
れ,コマンドの終了を待たずにプロンプトが表示される.
コマンド名を入力して<RET> を押すと,プロンプトはコマンドの処理が 終わるまで表示されなくなる.このようにシェルと対話式に処理していくジョ ブを,``フォアグラウンドジョブ''という.次の例では,エディタであるMule (→)を起動するコマンドを実行しているが,このMuleはフォア グラウンドジョブで行っているため,Muleを終了するまでプロンプトが表示さ れず,他のコマンドを実行できない.
% mule<RET>
_
&
''をつけて
実行する.
次の例では,バックグラウンドジョブでMuleを起動しているため,Muleを使い ながら他のコマンドを実行できる.フォアグラウンドジョブとして実行できる ジョブは1つだけだが,バックグラウンドジョブで実行することで,複数のジョ ブを同時に実行できる.
% mule &<RET>
[1] 15895
% _
シェルが現在実行しているジョブの情報を知るには,jobsコマンドを用 いる.
% jobs<RET>
[1] - Running xclock
[2] + Suspended less /home/s98000hf/file3
[3] Running xbiff
% _
[ ]
の中の数字は,ジョブ番号といい,シェルがジョブを処理す
る際にジョブにつける番号である.ジョブを操作するコマンドは,すべてこの
ジョブ番号を指定して行う.その他の表示の意味を表→に示
す.
ジョブの操作には,表→のようなコマンドを用いる.
いずれもジョブ番号を%
の後に引数として実行する対象を指定する.
ジョブ番号が省略された場合,killコマンド以外はcurrentジョブが対
象となる.
実行中のフォアグラウンドジョブを強制終了するには,C-cを押す.ま た,C-zを押すと,フォアグラウンドで実行されているジョブをサスペ ンド(一時中断)できる.さらに,サスペンドしたジョブはfgやbg などのコマンドで復帰する.例えばバックグラウンドで起動するジョブを間違 えてフォアグラウンドで起動してしまったときに,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 % _