jobsコマンドとは?Linuxでバックグラウンドジョブを確認・管理する方法

Linux

Linuxでプログラムをバックグラウンド実行したあと、「今どんなジョブが動いているんだろう?」と思ったことはありませんか?

そんなときに便利なのがjobsコマンドです。

jobsコマンドを使うと、現在のシェルで実行中・停止中のバックグラウンドジョブを一覧表示できます。

nohup、bg、fgなどと組み合わせて利用する機会も多く、Linuxを扱ううえで覚えておきたい基本コマンドの一つです。

この記事では、jobsコマンドの基本的な使い方から、ジョブ番号の見方、fg・bgとの違いまで初心者向けに分かりやすく解説します。

jobsコマンドとは

jobsコマンドは、現在のシェルで管理しているジョブ一覧を表示するコマンドです。

プロセス全体を表示するpsコマンドとは異なり、現在のシェルから起動したジョブだけが表示されます。

jobsコマンドの基本構文

jobs [オプション]

最も基本的な使い方は次のとおりです。

jobs

実行中または停止中のジョブが一覧表示されます。

jobsコマンドの表示例

$ jobs
[1]- Running                 python app.py &
[2]+ Stopped                 vim sample.txt

ジョブ番号・状態・実行コマンドが表示されます。

ジョブ番号の見方

表示 意味
[1] ジョブ番号
Running 実行中
Stopped 停止中
+ 現在のジョブ
次に参照されるジョブ

バックグラウンド実行したジョブを確認する

例えば次のようにバックグラウンド実行します。

sleep 300 &

続いてjobsコマンドを実行します。

jobs

実行中のジョブが表示されれば成功です。

実行中ジョブだけ表示する

jobs -r

Running状態のジョブだけ確認できます。

停止中ジョブだけ表示する

jobs -s

Stopped状態だけ表示されます。

PIDも確認する

jobs -l

ジョブ番号だけでなくPIDも表示されるため、killコマンドと組み合わせる際に便利です。

ジョブをフォアグラウンドへ戻す

fg %1

ジョブ番号1を現在のターミナルへ戻します。

停止したジョブを再開する

bg %1

停止中のジョブをバックグラウンドで再開できます。

ジョブを終了する方法

ジョブを終了する場合は、ジョブ番号またはPIDを指定してkillコマンドを利用します。

kill %1

または、PIDが分かっている場合は次のように指定します。

kill 2458

通常はSIGTERMで終了し、必要な場合のみSIGKILLを利用しましょう。

jobsとpsの違い

コマンド 確認対象
jobs 現在のシェルが管理しているジョブ
ps システム全体のプロセス

SSHで新しく接続し直した場合、以前のシェルで実行したジョブはjobsでは表示されません。

そのような場合はpsコマンドやpgrepコマンドで確認します。

jobsとnohupの違い

jobsは現在のシェル内でジョブを確認・管理するためのコマンドです。

一方、nohupはログアウト後もプログラムを実行し続けるためのコマンドです。

コマンド 用途
jobs ジョブの確認・管理
nohup ログアウト後も処理を継続する

SSH接続を切断しても処理を継続したい場合は、nohupを利用しましょう。

jobsとfg・bgの関係

jobsコマンドは、fg・bgコマンドと組み合わせて使われることが多くあります。

コマンド 役割
jobs ジョブ一覧を表示する
fg フォアグラウンドへ戻す
bg バックグラウンドで再開する

ジョブ番号を確認してからfgやbgを実行する流れを覚えておくと便利です。

シェルスクリプトで利用する例

複数の処理をバックグラウンドで実行したあと、ジョブ一覧を確認できます。

sleep 60 &
sleep 120 &
jobs

テストや検証環境でもよく利用される操作です。

よくあるエラー・注意点

ジョブが表示されない

現在のシェルで起動したジョブが存在しない可能性があります。

また、SSHで再接続した場合は以前のジョブは表示されません。

ジョブ番号が見つからない

対象ジョブが既に終了しているか、別のシェルで起動されています。

必要に応じてpsコマンドで確認してください。

jobsでPIDが分からない

PIDも確認したい場合は、jobs -lを利用しましょう。

jobs -l

PIDが表示されるため、killコマンドへそのまま指定できます。

ログアウトするとジョブが消えた

jobsは現在のシェルで管理しているジョブだけを表示します。

ログアウト後も処理を継続したい場合は、nohupやscreen、tmuxを利用してください。

よくある質問

jobsコマンドはシステム全体のプロセスを表示しますか?

いいえ。現在のシェルで管理しているジョブのみ表示します。

jobsで表示されたジョブを終了できますか?

はい。kill %ジョブ番号で終了できます。

jobsとpsはどちらを使えばよいですか?

現在のシェル内のジョブを確認するならjobs、システム全体のプロセスを確認するならpsを利用します。

SSHで再接続したらjobsが空になりました

正常な動作です。

jobsはシェル単位で管理されるため、新しいセッションでは以前のジョブは表示されません。

バックグラウンドジョブを再開するには?

停止中であれば、bg %ジョブ番号でバックグラウンド実行を再開できます。

まとめ

jobsコマンドは、Linuxで現在のシェルが管理しているバックグラウンドジョブを確認・管理するための基本コマンドです。

特に次のコマンドは覚えておくと便利です。

コマンド 用途
jobs ジョブ一覧を表示する
jobs -l PIDも表示する
jobs -r 実行中ジョブのみ表示する
jobs -s 停止中ジョブのみ表示する
fg %1 フォアグラウンドへ戻す
bg %1 バックグラウンドで再開する
kill %1 ジョブを終了する

バックグラウンド処理を扱う場面では、「jobsで確認 → fg・bgで操作 → 必要に応じてkillで終了」という流れを覚えておくと、Linuxでの作業がよりスムーズになります。

コメント

タイトルとURLをコピーしました