このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:ジョブとは
ジョブとは
Linuxシステムで効率的に作業を進めるためには、プログラムの実行単位であるプロセスとジョブの概念を理解することが重要です。ここでは、ジョブについて詳しく解説し、プロセスとの違いや関係性を明らかにします。
プロセスとジョブの違い
まず、プロセスはLinuxカーネル(OS)から見た処理の単位です。一方、ジョブはシェルから見た処理の単位を指します。
- プロセス:メモリ上で実行中のプログラム。カーネルが管理し、一意のプロセスID(PID)を持つ。
- ジョブ:シェルで入力したコマンドライン全体。シェルが管理し、ジョブ番号を持つ。
プロセスとジョブの単位
単一コマンドの場合
$ ls -l
- プロセスの数:1(
ls -l
のプロセス) - ジョブの数:1(
ls -l
のコマンドライン)
複数コマンドをパイプで繋ぐ場合
図解:プロセスとジョブの関係
$ ls -l / | cat -n | less
- プロセスの数:3
・ls -l /
のプロセス
・cat -n
のプロセス
・less
のプロセス - ジョブの数:1(コマンドライン全体で1つのジョブ)
ジョブはシェルごとの処理単位
ジョブはシェルごとにジョブ番号を持ちます。同時に複数のターミナルエミュレータやシェルを使用している場合、ジョブ番号は各シェル内で管理されるため、異なるシェル間でジョブ番号が重複することがあります。
例:複数のシェルでのジョブ番号
ターミナル(シェル) | ジョブ番号 | コマンド |
---|---|---|
ターミナル1 | [1] | ls -l |
ターミナル1 | [2] | sleep 100 |
ターミナル2 | [1] | ping google.com |
ターミナル2 | [2] | top |
このように、ターミナル1とターミナル2でジョブ番号が重複していますが、シェルごとに独立して管理されています。
ジョブ制御の活用
シェルの機能を使うと、ジョブを一時停止したり、バックグラウンドで実行させたりといったジョブ制御が可能です。これにより、複数の作業を並行して効率よく実行できます。
ジョブ制御の主な操作
操作 | コマンドまたはキー操作 | 説明 |
---|---|---|
ジョブの一覧表示 | jobs | 現在のシェルで管理されているジョブを表示 |
ジョブの一時停止 | Ctrl + Z | 実行中のジョブを一時停止 |
ジョブのバックグラウンド実行 | bg [%ジョブ番号] | 一時停止中のジョブをバックグラウンドで再開 |
ジョブのフォアグラウンド実行 | fg [%ジョブ番号] | 一時停止中またはバックグラウンドのジョブを前面で実行 |
ジョブの終了 | kill [%ジョブ番号] | 指定したジョブを終了 |
例:ジョブの一時停止とバックグラウンド実行
1.長時間実行するコマンドを開始
user01@ubuntu:~$ sleep 500
2.Ctrl + Z
で一時停止
^Z
[1]+ 停止 sleep 500
3.バックグラウンドで再開
user01@ubuntu:~$ bg %1
[1]+ sleep 500 &
4.ジョブの一覧を確認
user01@ubuntu:~$ jobs
[1]+ 実行中 sleep 500 &
5.ジョブをフォアグラウンドに戻す
user01@ubuntu:~$ fg %1
sleep 500
6.再度、Ctrl + Z
で一時停止
^Z
[1]+ 停止 sleep 500
7.ジョブの終了
user01@ubuntu:~$ kill %1
[1]+ 停止 sleep 500
8.ジョブの一覧を確認
user01@ubuntu:~$ jobs
[1]+ Terminated sleep 500
まとめ
- プロセスは、Linuxカーネルから見たプログラムの実行単位であり、一意のプロセスIDで管理されます。
- ジョブは、シェルから見たコマンドラインの実行単位であり、シェルごとにジョブ番号で管理されます。
- パイプで繋いだ複数のコマンドは、それぞれ別のプロセスとして実行されますが、ジョブとしてはコマンドライン全体で1つと扱われます。
- ジョブ制御を活用することで、ジョブの一時停止、バックグラウンド実行、フォアグラウンドへの復帰などが可能となり、効率的に複数の作業を並行して行うことができます。
ジョブの概念を理解し、ジョブ制御を使いこなすことで、Linux環境での作業効率を大幅に向上させることができます。日々の操作に取り入れて、より生産的なシェル操作を実現しましょう。