バックグラウンドジョブの確認
UNIXおよびUNIX LIKEにおけるJob controlの一部であるjobsコマンドについて説明します。
jobsは現在のshellのbackgroundで実行中のjobを確認するためのコマンドです。
Windowsと比較すると、
jobsはtaskbar(タスクバー)に似ており、
現在のセッションで実行中であるがforegroundでは見ることができない、
最小化されてbackgroundで実行中のプログラムを確認する行為に相当します。
🔵 注
UNIXにおける
JobはProcessの集合を意味します。
JobのPIDはProcess Group IDを意味します。
🔵 注
MacOS、Sonomaで
zshを使用してテストしました。
zshは拡張機能があり、man zshbuiltinsで詳細情報を確認できます。
🔵 注
この文書は
UNIXの公式グループであるTHE Open GROUPが提供するThe Open Group Base Specifications Issue 7のjobsの説明を翻訳したもので、ユーザーが知っておくべき部分を簡潔に説明しています。
概要
[ ](角括弧)は省略可能です。|(パイプ)は複数のオプションの中から1つを選択できます。...(三点リーダー)は複数の引数を指定できます。
jobs [-l| -p][job_id...]
オプション
-
-l
(小文字のL)リストされた各ジョブに関する詳細情報を提供します。この情報にはジョブ番号、現在のジョブ、プロセスグループID、状態、およびジョブを形成したコマンドが含まれます。 -
-p
選択したジョブのプロセスグループリーダーに対するプロセスIDのみを表示します。
オペランド
job_id
状態を表示するジョブを指定します。job_idが指定されていない場合、すべてのジョブに対する状態情報が表示されます。job_idの形式はXBDJob Control Job IDに説明されています。
STDOUT
-pオプションが指定された場合、
出力は各プロセスIDに対して1行で構成されます。
"%d\n", <process ID>
-lオプションが指定されていない場合、
出力は次の形式の一連の行で構成されます。
"[%d] %c %s %s\n", <job-number>, <current>, <state>, <command>
ここでフィールドは次のようになります:
-
<job-number>wait、fg、bg、およびkillユーティリティにプロセスグループを識別するために使用できる番号です。- これらのユーティリティを使用して、ジョブ番号の前に
%を付けてジョブを識別できます。
-
<current>- 文字
+はfgまたはbgユーティリティに対するデフォルトとして使用されるジョブを識別します。
このジョブはjob_id %+または"%%"を使用して指定することもできます。 - 文字
-は現在のデフォルトジョブが終了した場合のデフォルトとなるジョブを識別します。
このジョブはjob_id %-を使用して指定することもできます。 - 他のジョブの場合、このフィールドは
space(空白)です。 - 最大1つのジョブのみが
+で、最大1つのジョブのみが-で識別できます。 - どのジョブが中断された場合、現在のジョブは中断されたジョブである必要があります。
- 最低2つのジョブが中断された場合、前のジョブも中断されたジョブである必要があります。
- 文字
-
<state>
次の文字列のいずれかです(POSIX localeで):Running
ジョブが信号によって中断されておらず、終了していないことを示します。Done
ジョブが完了し、終了状態が0を返したことを示します。Done(code)
ジョブが正常に完了し、指定された0以外の終了状態、codeで終了したことを示します。Stopped
ジョブがSIGTSTP信号によって中断されたことを示します。Stopped (SIGTSTP)
ジョブがSIGTSTP信号によって中断されたことを示します。Stopped (SIGSTOP)
ジョブがSIGSTOP信号によって中断されたことを示します。Stopped (SIGTTIN)
ジョブがSIGTTIN信号によって中断されたことを示します。Stopped (SIGTTOU)
ジョブがSIGTTOU信号によって中断されたことを示します。
-
<command>- シェルに提供された関連コマンドです。
-lオプションが指定された場合、
プロセスグループIDを含むフィールドが<state>フィールドの前に挿入されます。
また、プロセスグループ内の他のプロセスが別の行に出力されることがあり、プロセスIDと<command>フィールドのみを使用します。
例
まず、単純なjobを生成するコマンドをshellで入力します。
sleep 100 &
10分間待機して消滅するコマンドであるsleepを、
&(アンパサンド)を利用してbackgroundで実行するコマンドです。
🔵 注
&(アンパサンド)は現在のセッションでバックグラウンドでプロセスを実行するコマンドです。
オプションなしでjobsコマンドを実行した結果は次のとおりです。
コマンド入力
jobs
出力
[1] + 12345 Running sleep $((60 * 10)) &
zshを利用してjobsコマンドを実行した結果は次のとおりです。
zshはjobが終了するとDoneが出力されます。
🟣 重要
zsh 5.9 (x86_64-apple-darwin23.0)はjobs -pを使用するとプロセス番号のみを出力する必要がありますが、バグがあり-lオプションと同じ機能を持っています。
bashはjobs -pがプロセス番号のみを正常に出力します。