$ date ; who | wc # この一行で1ジョブ、3コマンド Mon Sep 24 21:09:39 JST 2007 1 6 68コマンドが終了する前に、キーボードからコマンド操作を指示することはできますが、 コマンドの実行はあくまでも、個々のジョブが完了してからになります。
$ date ; sleep 10 # この時点で Enter を入力 Mon Sep 24 21:14:58 JST 2007 date # まだ処理は終わってないがコマンド入力はできる $ date # 上記の sleep が完了してから、先行入力したコマンドを実行 Mon Sep 24 21:15:08 JST 2007コマンドの終わりにアンド(&)を付けると、 シェルはそのコマンドの終了を待たずにプロンプトを表示し、次のコマンドの入力待ちになります。
$ date; sleep 10 & Mon Sep 24 21:15:20 JST 2007 [1] 21461 $ date # 上記ジョブ投入直後にプロンプトが表示される Mon Sep 24 21:15:20 JST 2007 # 結果 date コマンド2つは同時に実行される $ pwd /home/ycos/shell/wk [1]+ Done sleep 10
フォアグラウンドジョブはキーボードと直結されるため、同時期に1つだけですが、
バックグラウンドジョブは複数実行させることができます。
各バックグラウンドジョブにはジョブ番号とよばれる通し番号で管理され、
それを指定することで、フォアグラウンドへの付けかえ、一時停止、強制終了を
行うことができます。ジョブの一覧は jobs で確認できます。
$ sleep 100 | # フォアグラウンドを一時停止 |
^Z | # 実際には ^Z は表示されません |
[1]+ Stopped | |
$ bg %1 | # 一時停止したジョブをバックグランドで再開 |
[1]+ sleep 100 > | |
$ jobs | # ジョブの一覧 |
[1]+ Running | |
$ kill %1 | # バックグラウンドの強制終了 |
![]() | 機能 | フォアグラウンド | バックグラウンド |
---|---|---|---|
一時停止 | ^Z | stop %job | |
強制終了 | ^C | kill %job | |
切り替え | bg %job | fg %job |
bg %ジョブ番号 fg %ジョブ番号カレントジョブ(直近のジョブ)は、ジョブ番号を省略することができます。 カレントジョブは jobs コマンドで、プラス(+)が付加さ表現されています。
一時停止中のジョブがある時に、新たにジョブを停止すると後から投入されたジョブが
カレント・ジョブに変わります。この時カレント・ジョブはプレビアスジョブ
(直前のジョブ)に変わり、jobs コマンドで、マイナス(-)印で表現されます。
カレントジョブ、プリビアスジョブはそれぞれ %+, %- で指定できます。
$ jobs [1] Stopped cat [2] Stopped wc [3]- Stopped tail -f - [4]+ Stopped head - $ fg head - [4]+ Stopped head - $ fg %- tail -f - [3]+ Stopped tail -f -
$ exit logout There are stopped jobs.再度、ログアウトを指示すればバックグラウンドジョブを強制終了し、ログアウトします。