ジョブ(フォアグラウンド、バックグラウンド)を理解しよう

ジョブとは

ジョブとは、コマンドやプログラムを実行した時の一つのまとまりのことです。
例えば「ls | grep log」のコマンドを実行すると、複数のプロセスが立ち上がります。
つまり1行のコマンドを実行しても立ち上がるプロセスは、1つとは限りません。
この1行のコマンドで立ち上がった複数のプロセスをまとめたものをジョブといいます。
ジョブの一覧は、jobsコマンドで確認出来ます。

$ jobs

ジョブ関連のコマンド一覧

コマンド説明
jobsバックグラウンドで実行中、一時停止中のジョブ一覧を表示する。
ジョブ番号も確認出来ます
fg [ジョブ番号]指定したジョブ番号をフォアグランドで実行する。
bg [ジョブ番号]指定したジョブ番号をバックグランドで実行する。
[コマンド] &実行したコマンドをバックグラウンドで実行する。
Ctrl + z実行中のジョブを一時停止する。

バックグランドにジョブを移そう

実行したけど、思ったより時間がかかって終わらない。ってことがあると思います。
それでもそのターミナルで、別の作業をしたい。というときに実行中のジョブをバックグラウンドに移動しましょう。

$ bg ジョブ番号

実例)
$ sleep 1000 → ここでCtrl + Zを押下して、jobを一時停止する
^Z
[1]+ 停止  sleep 1000
$ ここでターミナルから新しいコマンドが入力出来る
$ bg 1 → [1]のsleep 1000 をバックグラウンドに移動する
[1]+ sleep 1000 &
$

フォアグラウンドにジョブを戻そう

バックグラウンドで実行していたけど、フォアグラウンドに戻したい場合があります。
その場合は、fgコマンドでジョブをフォアグランドに戻しましょう。

$ fg ジョブ番号

実例)
$ jobs → ここで実行中のjobを確認する
[1]+ 実行中 sleep 1000 &
$ fg 1 → sleep 1000 & をフォアグラウンドに移動する
sleep 1000

最初からバックグラウンドでジョブを実行しよう

&(アンパサンド)を付けると初めからバックグラウンドで実行出来ます。
時間がかかるとわかっているものについては、初めからバックグラウンドで実行しましょう

$ sleep 1000 & → &を付けると初めからバックグラウンドで実行出来ます。
[1] 16032 → ジョブIDとプロセス番号が表示される。

jobsコマンドで確認すると下記のように表示される。
$ jobs
[1]+ 実行中 sleep 1000 &