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
が出力されます。