[Linux] jobsコマンドの使い方 – アクティブなジョブの一覧を取得する
jobs
コマンドは、現在シェルで実行中または停止中のジョブ(バックグラウンドやフォアグラウンドで実行されているプロセス)の一覧を表示するために使用されます。
ジョブはシェルで管理されるプロセスの単位で、jobs
コマンドを実行すると、ジョブ番号、状態(実行中、停止中など)、およびコマンド名が表示されます。
バックグラウンドで実行中のジョブを確認したい場合に便利です。
jobs -l
オプションを使うと、プロセスIDも表示されます。
- jobsコマンドの基本的な使い方とオプションの活用方法
- fg、bg、killコマンドを使ったジョブ操作の方法
- 複数のジョブを並行して管理する方法
- niceコマンドを使ったジョブの優先順位変更方法
jobsコマンドとは
jobs
コマンドは、Bashシェルで実行中または停止中のジョブ(プロセス)の状態を確認するためのコマンドです。
ジョブとは、シェルで実行されるプロセスの単位であり、バックグラウンドで実行されているものや、フォアグラウンドで一時停止しているものなどが含まれます。
jobs
コマンドを使うことで、現在のシェルセッションで管理されているジョブの一覧を取得し、それぞれのジョブがどのような状態にあるのかを確認できます。
例えば、バックグラウンドで実行中のジョブや、Ctrl + Z
で一時停止したジョブを確認する際に便利です。
ジョブの状態は「実行中」「停止中」などのステータスで表示され、ジョブ番号やプロセスID(PID)も併せて確認できます。
jobsコマンドの基本的な使い方
jobs
コマンドは、シェルで実行中または停止中のジョブの状態を確認するために使用されます。
ここでは、基本的な使い方について解説します。
jobsコマンドの実行方法
jobs
コマンドは、特に引数を指定せずに実行するだけで、現在のシェルセッションで管理されているジョブの一覧を表示します。
以下のように、シンプルにコマンドを入力するだけです。
$ jobs
このコマンドを実行すると、現在のシェルで実行中または停止中のジョブが一覧表示されます。
ジョブが存在しない場合は、何も表示されません。
ジョブの状態の確認
jobs
コマンドを実行すると、各ジョブの状態が表示されます。
ジョブの状態には以下のようなものがあります。
状態 | 説明 |
---|---|
実行中 | ジョブがバックグラウンドで実行中 |
停止中 | ジョブが一時停止している |
終了済み | ジョブが終了した(完了した) |
例えば、以下のようにjobs
コマンドを実行した場合、ジョブの状態が「実行中」や「停止中」として表示されます。
$ jobs
[1]+ 実行中 sleep 100 &
[2]- 停止中 top
この例では、ジョブ番号1のsleep 100
がバックグラウンドで実行中であり、ジョブ番号2のtop
が一時停止していることがわかります。
ジョブ番号とプロセスIDの違い
jobs
コマンドで表示されるジョブには、ジョブ番号とプロセスID(PID)の2つの識別子があります。
これらは異なるものであり、以下のように使い分けられます。
- ジョブ番号: シェル内でのジョブの識別子。
fg
やbg
コマンドでジョブを操作する際に使用します。
ジョブ番号はシェルセッションごとに一意です。
- プロセスID(PID): システム全体で一意のプロセス識別子。
kill
コマンドなどでプロセスを終了させる際に使用します。
例えば、以下のようにjobs -l
コマンドを実行すると、ジョブ番号とプロセスIDの両方が表示されます。
$ jobs -l
[1]+ 12345 実行中 sleep 100 &
[2]- 12346 停止中 top
この例では、ジョブ番号1のプロセスIDは12345、ジョブ番号2のプロセスIDは12346です。
jobsコマンドのオプション
jobs
コマンドには、ジョブの詳細情報を表示したり、特定の状態のジョブのみを表示したりするためのオプションがいくつか用意されています。
ここでは、代表的なオプションについて解説します。
-lオプション:プロセスIDの表示
-l
オプションを使用すると、ジョブ番号に加えて、各ジョブのプロセスID(PID)も表示されます。
プロセスIDは、システム全体で一意の識別子であり、kill
コマンドなどでプロセスを操作する際に役立ちます。
$ jobs -l
[1]+ 12345 実行中 sleep 100 &
[2]- 12346 停止中 top
この例では、ジョブ番号1のプロセスIDが12345、ジョブ番号2のプロセスIDが12346であることが確認できます。
-l
オプションを使うことで、ジョブの詳細な情報を取得できます。
-pオプション:プロセスIDのみの表示
-p
オプションを使用すると、ジョブのプロセスID(PID)のみを表示します。
ジョブ番号や状態は表示されず、PIDだけが出力されるため、プロセスIDを確認したい場合に便利です。
$ jobs -p
12345
12346
この例では、ジョブ番号に関係なく、プロセスIDだけが表示されています。
複数のジョブが存在する場合、それぞれのプロセスIDが改行で区切られて表示されます。
-rオプション:実行中のジョブのみ表示
-r
オプションを使用すると、現在実行中のジョブのみを表示します。
バックグラウンドで動作しているジョブを確認したい場合に便利です。
$ jobs -r
[1]+ 実行中 sleep 100 &
この例では、ジョブ番号1のsleep 100
が実行中であることが表示されています。
停止中のジョブは表示されません。
-sオプション:停止中のジョブのみ表示
-s
オプションを使用すると、現在停止中のジョブのみを表示します。
Ctrl + Z
で一時停止したジョブや、シグナルによって停止したジョブを確認する際に役立ちます。
$ jobs -s
[2]- 停止中 top
この例では、ジョブ番号2のtop
が停止中であることが表示されています。
実行中のジョブは表示されません。
ジョブの操作方法
jobs
コマンドで確認したジョブは、fg
やbg
、kill
などのコマンドを使って操作することができます。
ここでは、ジョブをフォアグラウンドに戻したり、バックグラウンドで再開したり、終了させる方法について解説します。
fgコマンドでジョブをフォアグラウンドに戻す
fg
コマンドを使うと、バックグラウンドや停止中のジョブをフォアグラウンドに戻して実行することができます。
フォアグラウンドに戻すことで、シェルがそのジョブに対して入力を受け付けるようになります。
$ fg %1
この例では、ジョブ番号1のジョブをフォアグラウンドに戻しています。
%
の後にジョブ番号を指定することで、特定のジョブを操作できます。
ジョブ番号を省略すると、最後に停止したジョブがフォアグラウンドに戻されます。
bgコマンドでジョブをバックグラウンドで再開する
bg
コマンドを使うと、停止中のジョブをバックグラウンドで再開することができます。
バックグラウンドで再開されたジョブは、シェルの入力をブロックせずに実行され続けます。
$ bg %2
この例では、ジョブ番号2のジョブをバックグラウンドで再開しています。
bg
コマンドを使うことで、シェルの操作を続けながらジョブを実行することが可能です。
fg
と同様に、ジョブ番号を省略すると、最後に停止したジョブが対象となります。
killコマンドでジョブを終了させる
kill
コマンドを使うと、特定のジョブを終了させることができます。
kill
コマンドはプロセスID(PID)を指定してプロセスを終了させるため、まずjobs -l
コマンドでプロセスIDを確認する必要があります。
$ kill 12345
この例では、プロセスIDが12345のジョブを終了させています。
kill
コマンドはデフォルトでSIGTERM
シグナルを送信し、プロセスを正常に終了させます。
強制終了したい場合は、-9
オプションを付けてSIGKILL
シグナルを送信します。
$ kill -9 12345
この例では、プロセスID12345のジョブを強制終了しています。
応用例:複数のジョブを管理する
Bashでは、複数のジョブを同時に管理することが可能です。
ここでは、複数のジョブを並行して実行したり、特定のジョブを再開・停止したり、ジョブの優先順位を変更する方法について解説します。
複数のジョブを並行して実行する
Bashでは、複数のジョブをバックグラウンドで並行して実行することができます。
バックグラウンドでジョブを実行するには、コマンドの末尾に&
を付けます。
$ sleep 100 &
$ sleep 200 &
この例では、sleep 100
とsleep 200
の2つのジョブがバックグラウンドで並行して実行されます。
jobs
コマンドを使うと、これらのジョブが実行中であることを確認できます。
$ jobs
[1]+ 実行中 sleep 100 &
[2]- 実行中 sleep 200 &
このように、複数のジョブを同時に実行することで、シェルの操作を続けながら複数のタスクを並行して処理できます。
特定のジョブを再開・停止する
特定のジョブを再開したり停止したりするには、fg
やbg
、kill
コマンドを使用します。
例えば、Ctrl + Z
で一時停止したジョブを再開するには、fg
またはbg
コマンドを使います。
$ fg %1
この例では、ジョブ番号1をフォアグラウンドで再開しています。
バックグラウンドで再開する場合は、bg
コマンドを使用します。
$ bg %2
この例では、ジョブ番号2をバックグラウンドで再開しています。
また、特定のジョブを停止するには、kill
コマンドを使ってシグナルを送信します。
$ kill -STOP 12345
この例では、プロセスID12345のジョブを一時停止しています。
再開する場合は、kill -CONT
を使用します。
$ kill -CONT 12345
このコマンドで、停止中のジョブを再開できます。
ジョブの優先順位を変更する(niceコマンドとの併用)
nice
コマンドを使うと、ジョブの優先順位(プロセスのスケジューリング優先度)を変更することができます。
nice
値が低いほど優先度が高くなり、nice
値が高いほど優先度が低くなります。
デフォルトでは、nice
値は0ですが、nice
コマンドを使って値を変更できます。
$ nice -n 10 sleep 100 &
この例では、sleep 100
をnice
値10でバックグラウンド実行しています。
nice
値を変更することで、システムリソースの使用を調整し、他のプロセスに影響を与えないようにすることができます。
また、既に実行中のジョブの優先順位を変更するには、renice
コマンドを使用します。
$ renice 5 -p 12345
この例では、プロセスID12345のジョブのnice
値を5に変更しています。
これにより、ジョブの優先度を動的に調整することが可能です。
よくある質問
まとめ
この記事では、jobs
コマンドの基本的な使い方から、オプションの活用方法、ジョブの操作方法、さらには複数のジョブを管理する応用例までを詳しく解説しました。
jobs
コマンドを使うことで、シェル内で実行中や停止中のジョブを効率的に管理し、必要に応じて再開や終了といった操作が可能になります。
これを機に、実際にjobs
コマンドや関連するfg
、bg
、kill
コマンドを使って、複数のジョブを管理するスキルを日常の作業に取り入れてみてください。