◆ ジョブとは
ジョブとは、1つ以上のコマンドで動作するひとまとまりの処理単位。シェル上で1つのコマンドを実行する
場合だけでなくパイプコマンドを使用して複数のコマンドを実行する場合もジョブになります。下図を参考。
◆ フォアグラウンドジョブ、バックグラウンドジョブ
ジョブにはフォアグラウンドジョブとバックグラウンドジョブの2種類があります。通常のコマンドは、
フォアグラウンドジョブで実行されます。そのため、処理時間のかかるコマンドの場合、次のコマンド
が入力できない状態になってしまいます。
ジョブ |
説明 |
フォアグラウンドジョブ |
ジョブの実行中は、シェルは停止する。 |
バックグラウンドジョブ |
ジョブとシェルが同時に動作して、シェルは停止しない。 |
そこで、コマンドラインの最後に & を追加することで、コマンドはバックグラウンドジョブで実行する
ことになるため、実行中のジョブは裏で処理されて次に入力したいコマンドをすぐに入力可能となります。
例えばupdatedbコマンドでは処理時間がかかる場合があり、バックグラウンドジョブとして処理します。
※ [ ] 内の数値はジョブ番号、15385 はPIDです。
実行中のジョブは jobs コマンドで確認できます。[ ] 内のジョブ番号のうしろの + は現在実行中のジョブ、
- は直前に実行されたジョブ、Running は現在実行中のジョブ、Stopped は一時停止中のジョブを示します。
$ jobs
[1]+ Running updatedb
[2]- Stopped grep 192.168 /var/log/messages | more
|
以下のようにnohupコマンドを直前に入力することで、ログアウト状態でもupdatedbコマンドを実行可能。
◆ フォアグラウンドとバックグラウンドの制御
フォアグラウンドジョブとバックグラウンドジョブの状態はbgコマンド、fgコマンド、Ctrl+Cキー、Ctrl+Z
キーなどで相互に移行したりすることができます。例えば、以下のようにupdatedbコマンドをデフォルトの
フォアグラウンドジョブとして実行してから、Ctrl+Zキーを入力すると、バックグラウンドの停止中状態に
移行できます。その後、bgコマンドでジョブ番号を指定することでバックグラウンドジョブとして再実行が可。
◆ 実行例 : updatedbコマンド入力後、Ctrl+Zキーを入力してジョブを停止
$ updatedb
[1]+ Stopped updatedb
|
◆ 実行例 : bgコマンドでジョブ番号 1 を指定し、バックグラウンドジョブとして再実行
一方、バックグラウンドのジョブをフォアグラウンドのジョブとして実行することも可能。現在動作して
いるジョブをjobsコマンドで確認します。フォアグラウンドで実行したいジョブ番号を fgコマンドで指定。
◆ 実行例 : updatedbコマンドをバックグラウンドで実行 ⇒ jobsコマンドでジョブ番号の確認 ⇒ fgコマンドでジョブ番号指定
$ updatedb &
$ jobs
[1]+ Running updatedb
$ fg 1
|
ジョブ制御 |
説明 |
Ctrl + C |
フォアグラウンドのジョブを強制終了 |
Ctrl + Z |
フォアグラウンドジョブを、バックグラウンドジョブの停止状態へ移行 |
bg |
バックグラウンドで停止中のジョブを実行状態にする |
fg |
バックグラウンドジョブをフォアグラウンドジョブに変更する |
|