[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つの識別子があります。

これらは異なるものであり、以下のように使い分けられます。

  • ジョブ番号: シェル内でのジョブの識別子。

fgbgコマンドでジョブを操作する際に使用します。

ジョブ番号はシェルセッションごとに一意です。

  • プロセス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コマンドで確認したジョブは、fgbgkillなどのコマンドを使って操作することができます。

ここでは、ジョブをフォアグラウンドに戻したり、バックグラウンドで再開したり、終了させる方法について解説します。

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 100sleep 200の2つのジョブがバックグラウンドで並行して実行されます。

jobsコマンドを使うと、これらのジョブが実行中であることを確認できます。

$ jobs
[1]+  実行中    sleep 100 &
[2]-  実行中    sleep 200 &

このように、複数のジョブを同時に実行することで、シェルの操作を続けながら複数のタスクを並行して処理できます。

特定のジョブを再開・停止する

特定のジョブを再開したり停止したりするには、fgbgkillコマンドを使用します。

例えば、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 100nice値10でバックグラウンド実行しています。

nice値を変更することで、システムリソースの使用を調整し、他のプロセスに影響を与えないようにすることができます。

また、既に実行中のジョブの優先順位を変更するには、reniceコマンドを使用します。

$ renice 5 -p 12345

この例では、プロセスID12345のジョブのnice値を5に変更しています。

これにより、ジョブの優先度を動的に調整することが可能です。

よくある質問

jobsコマンドで表示されないジョブがあるのはなぜ?

jobsコマンドで表示されるジョブは、現在のシェルセッションで管理されているジョブのみです。

以下の理由でジョブが表示されないことがあります。

  • 他のシェルで実行されたジョブ: jobsコマンドは、現在のシェルセッションで実行されたジョブしか表示しません。

別のターミナルやシェルで実行されたジョブは表示されません。

  • 終了したジョブ: ジョブが終了すると、jobsコマンドでは表示されなくなります。

終了したジョブの情報は、psコマンドなどで確認する必要があります。

  • フォアグラウンドで実行中のジョブ: フォアグラウンドで実行中のジョブは、jobsコマンドでは表示されません。

バックグラウンドや停止中のジョブのみが対象です。

ジョブ番号とプロセスIDはどう違うのか?

ジョブ番号とプロセスID(PID)は、異なる目的で使用される識別子です。

  • ジョブ番号: シェル内でのジョブの識別子で、fgbgコマンドでジョブを操作する際に使用します。

ジョブ番号はシェルセッションごとに一意で、%1%2のように指定します。

  • プロセスID(PID): システム全体で一意の識別子で、killコマンドなどでプロセスを操作する際に使用します。

プロセスIDはシステム全体で管理され、psコマンドなどで確認できます。

例:fg %1はジョブ番号1のジョブをフォアグラウンドに戻し、kill 12345はプロセスID12345のプロセスを終了させます。

jobsコマンドで表示されるジョブの状態はどのように変わるのか?

jobsコマンドで表示されるジョブの状態は、ジョブの実行状況に応じて変化します。

主な状態は以下の通りです。

  • 実行中: ジョブがバックグラウンドで実行されている状態です。

&を付けてコマンドを実行した場合や、bgコマンドで再開した場合にこの状態になります。

  • 停止中: ジョブが一時停止している状態です。

Ctrl + Zでフォアグラウンドのジョブを停止した場合や、kill -STOPコマンドで停止させた場合にこの状態になります。

  • 終了済み: ジョブが正常に終了した状態です。

終了したジョブはjobsコマンドでは表示されなくなりますが、終了直後は「終了済み」として一時的に表示されることがあります。

ジョブの状態は、fgbgkillコマンドを使って操作することで動的に変化します。

まとめ

この記事では、jobsコマンドの基本的な使い方から、オプションの活用方法、ジョブの操作方法、さらには複数のジョブを管理する応用例までを詳しく解説しました。

jobsコマンドを使うことで、シェル内で実行中や停止中のジョブを効率的に管理し、必要に応じて再開や終了といった操作が可能になります。

これを機に、実際にjobsコマンドや関連するfgbgkillコマンドを使って、複数のジョブを管理するスキルを日常の作業に取り入れてみてください。

  • URLをコピーしました!
目次から探す