jobs は、**現在のシェル(ジョブ制御が有効)**でバックグラウンド実行中や停止中のジョブを一覧表示するシェル組み込みコマンドです。
実務では cmd & でバックグラウンド化した処理の確認、fg/bg/kill と組み合わせた制御に使います。
構文(Syntax)
# POSIX/Bash など(シェル組み込み)
jobs [-l|-p] [-n] [-r|-s] # 状態の一覧表示
# Bash 拡張
jobs -x COMMAND [ARG...]
jobsは 外部コマンドではなくシェル組み込みです(/bin/jobsは通常存在しません)。- 表示例の列:
[N] (+/-) 状態 コマンド([1]+ Running sleep 100 &など)
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-l | “ロング形式”。各ジョブの PID を含めて表示 | jobs -l |
-p | 各ジョブの PIDのみを表示(1行1PID) | jobs -p |
-n | 前回の通知以降に状態が変化したジョブだけ表示 | jobs -n |
-r | 実行中(Running) のジョブのみ | jobs -r |
-s | 停止中(Stopped) のジョブのみ | jobs -s |
-x COMMAND [ARG...] (Bash) | 引数内の ジョブ指定子(%1 等)を PID に展開して COMMAND を実行 | jobs -x kill -TERM %1 |
--help (Bash等) | ヘルプを表示 | help jobs(Bash) |
シェルによりフラグが微妙に異なります。上表は Bash/POSIX を中心に記載しています。
実行例
バックグラウンドジョブを作って一覧表示
説明: sleep をバックグラウンド化し、ジョブ一覧を確認します。
コマンド:
sleep 100 & # & でバックグラウンド実行
sleep 200 &
jobs
出力例(例):
[1]- Running sleep 100 &
[2]+ Running sleep 200 &
PID を含めて表示する(-l / -p)
説明: PID を確認して他コマンドに渡したいとき。
コマンド:
jobs -l
jobs -p
出力例(例):
[1]- 12345 Running sleep 100 &
[2]+ 12346 Running sleep 200 &
12345
12346
停止させて「停止中」だけを表示(-s)
説明: 実演のため 1 つのジョブを停止し、停止中のみ抽出します。
コマンド:
kill -STOP %1 # %1 はジョブ番号1を指す「ジョブ指定子」
jobs -s
出力例(例):
[1]- Stopped sleep 100
状態変化したものだけを表示(-n)
説明: 終了した/停止したなど変化があったジョブのみ表示します。
コマンド:
sleep 2 & # すぐ終わるジョブ
sleep 3
jobs -n # 最後の通知以降に変化したものだけ
出力例(例):
[3]+ Done sleep 2
Bash拡張:ジョブ指定子を PID に展開してコマンド実行(-x)
説明: %1 などを PID に置き換えて kill を実行します。
コマンド:
jobs -x kill -TERM %1
エラー例:ジョブ制御が無効な環境で実行
説明: 非対話シェルやジョブ制御無効だとエラーになります。
コマンド:
bash -c 'jobs'
出力例(例):
bash: jobs: job control not enabled
対処: 対話シェルで実行するか、必要なら set -m(モニターモード:ジョブ制御)を有効にします。
関連コマンド
bg: 停止中のジョブをバックグラウンドで再開。fg: 指定ジョブをフォアグラウンドへ。kill: ジョブ/プロセスへシグナル送信(kill %1など)。disown(Bash/Zsh) : ジョブをシェルの管理から外す(ログアウト後も継続させたい等)。wait: 指定ジョブ/プロセスの終了待ち。ps: システム全体のプロセス一覧(ジョブではなくプロセス視点)。
備考
- ジョブは“そのシェルだけ”: 親シェルと子シェルでジョブ表は別です。別の端末/
sudo/サブシェルでは見えません。 - ジョブ制御が必要: 端末を持たない非対話シェルや cron では通常
jobsは使えません。Bash のスクリプトで使う場合はset -mが必要になることがあります。 - ジョブ指定子:
%1,%2(番号),%+(カレント),%-(前のジョブ)などはfg/bg/killで利用できます。 - シェル差分:
- Bash: 上記オプションのほか
-xをサポート。 - Zsh: 表示形式や追加オプションが一部異なります(
man zshbuiltins参照)。 - POSIX:
-lと-pが規定。-n/-r/-sは拡張。
- Bash: 上記オプションのほか
- 権限: 一般ユーザーで利用可。プロセスへのシグナル送信は対象プロセスの所有者権限に従います。
参考
- GNU Bash リファレンス(Job Control Builtins –
jobs): https://www.gnu.org/software/bash/manual/bash.html#Job-Control-Builtins - POSIX
jobs仕様: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/jobs.html - Zsh ドキュメント(Jobs & Signals / Builtins): https://zsh.sourceforge.io/Doc/Release/Jobs-_0026-Signals.html

コメント