jobs – 現在のシェルで管理しているジョブの状態を表示する

フォアグラウンド/バックグラウンド
スポンサーリンク

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玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント