ジョブとは
ターミナルが実行している作業のこと。
localhostサーバーを動かす、ログを出力する、ファイルをコピーするなどの操作は全てジョブと呼ばれる。
ジョブの種類
ジョブには大きく分けて3つの種類があり、それぞれフォアグラウンドジョブ
、バックグラウンドジョブ
,サスペンドジョブ
と呼ばれる。
フォアグラウンドジョブ
フォアグラウンドジョブは出力結果がターミナル上に表示されるもののことを言う。
例えばファイルの中身を表示するcat
コマンドは結果がターミナルに表示されるのでフォアグラウンドジョブにあたる。
オプションを指定せずに実行したジョブは基本的にフォアグラウンドで処理される。
ターミナルを用いた出力を行うという都合上、処理が完了するまでは他のジョブを実行できないという欠点がある。
バックグラウンドジョブ
処理は行われているものの結果はターミナルに表示されず、裏側で動き続けているジョブのこと。
-d
オプションをつけてサーバーを起動した場合などがこれにあたる。
サスペンドジョブ
一時的に処理が中断されているジョブのこと。
再開されるまでの間は処理が止まった状態になるが、それまでターミナルを占有していたジョブがなくなるので他の処理を実行できるようになる。
サスペンドジョブに関するコマンド一覧
% Ctrl + z
% jobs
# 結果
[1] Stopped ping 172.17.0.3
[2]+ Stopped ping 172.17.0.3
[3]- Stopped ping 172.17.0.2
左端はジョブのID
% fg ジョブID
# ID省略時は+となっているものが実行される
% bg ジョブID
# ID省略時の挙動はfgと同じ
fgやbgで指定されたジョブが起動中だった場合には起動方法の変更のみが行われる(bg⇄fg)。
ジョブの停止に関する注意点
フォアグラウンドジョブに関してはCtrl + z
で停止可能。
バックグラウンドジョブに関してはCtrl + z
で停止することはできないので、一旦fg ID
でフォアグラウンドに切り替えた後にCtrl + z
で停止させる。
ジョブの実行方式の切り替えに関する注意点
最後に停止またはフォアグラウンドで起動したジョブに関しては+
状態となり、ID指定なしでも起動ができるようになる。
しかしバックグラウンド起動したジョブに関しては最終起動ジョブであっても+
状態とならない(既に+のジョブをbg起動した場合は除く)。
このため、bg起動しているジョブを停止させる目的でfg
とID指定なしで入力すると、bg起動ジョブが+
でなかった場合にはジョブの二重起動となってしまうことになる。