jobsコマンドでバックグラウンドジョブを確認する方法|fg・bg・nohupもコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドF-J, プロセス管理コマンド > jobsコマンドでバックグラウンドジョブを確認する方法|fg・bg・nohupもコマンド
「バックグラウンドで実行したコマンドがどうなっているか確認したい」
「Ctrl+Zで止まってしまった処理を、ログアウトしても継続させたい」
Linuxでの作業中、時間のかかるコマンドをバックグラウンドで走らせたり、一時停止した処理を再開したりする場面はよくあります。このときに欠かせないのがジョブ制御の仕組みです。

この記事では、jobs コマンドの実践的な使い方を解説します。
ジョブの確認方法から、fg/bg での切り替え、nohupdisown によるログアウト後の実行継続まで網羅しました。
【この記事でわかること】 ・jobsコマンドで現在のジョブ一覧を確認する方法
・バックグラウンド実行(&)とCtrl+Zでの一時停止
・fg / bg / kill によるジョブ制御の使い分け
・nohup / disown でログアウト後も処理を継続させる方法
・実務での典型パターン(vim一時退避→fgで復帰)

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

※本記事はbash前提です。zsh/fishでも基本動作は同じですが、ジョブ番号の指定書式が一部異なります。

ジョブとプロセスの違い

Linuxでは「プロセス」と「ジョブ」という2つの概念があります。

プロセス:OS全体で管理される実行単位。プロセスID(PID)で識別される。全てのプロセスに番号が振られる
ジョブ:シェル(端末)単位で管理される実行単位。ジョブ番号で識別される。そのシェルから実行したコマンドだけが対象

つまり、ジョブはシェルのローカルな管理番号であり、プロセスはシステム全体の管理番号です。

バックグラウンド実行の基本(&)

コマンドの末尾に & を付けると、バックグラウンドで実行できます。シェルがすぐに戻ってくるので、別の作業を続けられます。

# バックグラウンドでファイルをコピーする $ cp -r /var/log/ /tmp/backup/ & [1] 12345 # [1]がジョブ番号、12345がプロセスID

jobsコマンドの基本的な使い方

1. ジョブの一覧を表示する

jobs コマンドで、現在のシェルで実行中・停止中のジョブを一覧表示できます。

$ jobs [1] Running cp -r /var/log/ /tmp/backup/ & [2]- Stopped vim /etc/httpd/conf/httpd.conf [3]+ Stopped top

表示される記号の意味は以下の通りです。

[番号]:ジョブ番号
+:カレントジョブ(fg や bg をジョブ番号なしで実行した場合の対象)
-:直前のジョブ
Running:バックグラウンドで実行中
Stopped:一時停止中(Ctrl+Zで停止された状態)
Done:実行完了

2. プロセスID付きで表示する(-l)

-l オプションを付けると、ジョブ番号に加えてプロセスIDも表示されます。

$ jobs -l [1] 12345 Running cp -r /var/log/ /tmp/backup/ & [2]- 12400 Stopped vim /etc/httpd/conf/httpd.conf [3]+ 12450 Stopped top

kill コマンドでプロセスを終了したい場合は、ここで表示されるPIDを使います。

fg・bgコマンドでジョブを切り替える

1. fgでフォアグラウンドに戻す

fg コマンドで、バックグラウンドや停止中のジョブをフォアグラウンドに戻せます。

# ジョブ番号2をフォアグラウンドに戻す $ fg %2 vim /etc/httpd/conf/httpd.conf # カレントジョブ(+マーク)をフォアグラウンドに戻す $ fg

2. bgでバックグラウンド実行を再開する

Ctrl+Zで停止したジョブを、バックグラウンドで再開するには bg を使います。

# 時間のかかるコマンドを実行中に Ctrl+Z で停止 $ find / -name "*.log" -size +100M ^Z [1]+ Stopped find / -name "*.log" -size +100M # バックグラウンドで再開する $ bg %1 [1]+ find / -name "*.log" -size +100M &

3. Ctrl+Z → bg のよくある流れ

「フォアグラウンドで実行してしまったけど、時間がかかるのでバックグラウンドに回したい」という場面で使う定番の操作です。

1. Ctrl+Z でジョブを一時停止する
2. bg でバックグラウンドで再開する
3. 別の作業をする
4. 必要に応じて fg でフォアグラウンドに戻す

ログアウト後もジョブを継続する方法

1. nohupで実行する

通常、シェルからログアウトするとバックグラウンドジョブも終了します。nohup(no hang up)を付けると、ログアウト後も処理が継続します。

# nohupでバックグラウンド実行する $ nohup ./backup.sh & nohup: ignoring input and appending output to 'nohup.out' # 出力はnohup.outに保存される

出力先を指定したい場合は、リダイレクトを組み合わせます。

# 出力先をログファイルに指定する $ nohup ./backup.sh > /var/log/backup.log 2>&1 &

2. disownでジョブをシェルから切り離す

既にバックグラウンドで実行中のジョブを、あとからシェルから切り離したい場合は disown を使います。

# バックグラウンドで実行中のジョブを確認する $ jobs [1]+ Running ./long-process.sh & # ジョブをシェルから切り離す $ disown %1 # jobsに表示されなくなる(プロセスは継続中) $ jobs (何も表示されない)

nohup は実行前に付ける、disown は実行後に使う、と覚えておくと使い分けがしやすいです。

ジョブ番号の指定方法

fgbgkill などでジョブを指定するときは、以下の記法が使えます。

%1:ジョブ番号1を指定
%+:カレントジョブ(+マーク)を指定。%% でも同じ
%-:直前のジョブ(-マーク)を指定
%文字列:コマンド名が一致するジョブを指定(例:%vim

# ジョブ番号で強制終了する $ kill %1 # コマンド名でフォアグラウンドに戻す $ fg %vim

トラブルシュート・エラー対処

「-bash: fg: no job control in this shell」

このエラーは、ジョブ制御が無効になっているシェルで fgbg を実行した場合に発生します。

主な原因は以下の通りです。

・非対話的シェル(シェルスクリプト内など)で実行している
set +m でジョブ制御が明示的に無効化されている
su でログインシェルを使わずにユーザーを切り替えた(su - ではなく su

対処法として、su -(ハイフン付き)でユーザーを切り替えるか、ジョブ制御を有効にしてください。

# ジョブ制御を有効にする $ set -m

「-bash: fg: %1: no such job」

指定したジョブ番号が存在しません。jobs で現在のジョブを確認してください。ジョブが完了済みの場合もこのエラーが出ます。

fgコマンド徹底解説(停止中のジョブを前面に呼び戻す)

fg(foreground)は、停止中・バックグラウンド実行中のジョブをフォアグラウンド(端末の前面)に戻すコマンドです。jobsでジョブ番号を確認し、fg %番号で呼び戻すのが基本パターンです。

fgの基本書式

# 直前のジョブを前面に戻す(番号省略可) $ fg # ジョブ番号1を前面に戻す $ fg %1 # 「vim」で始まる名前のジョブを前面に戻す $ fg %vim

典型的な使い方:vim作業をCtrl+Zで一時退避→fgで復帰

viやvimで編集中に「ちょっとシェルでファイル一覧を確認したい」となった時、Ctrl+Z でvimを一時停止できます。停止後、シェルで作業を済ませてからfgで元のvimに戻る流れは、現場のエンジニアが日常的に使うテクニックです。

$ vim /etc/httpd/conf/httpd.conf (Ctrl+Z を押して一時停止) [1]+ Stopped vim /etc/httpd/conf/httpd.conf $ ls -la /etc/httpd/conf.d/ ←シェルで別作業 ... $ fg ←vimに復帰 vim /etc/httpd/conf/httpd.conf

fg と bg の違い

fg:停止中/バックグラウンドのジョブを前面(フォアグラウンド)に戻す
bg:停止中のジョブをそのままバックグラウンドで再開する(プロンプトには戻らない)

Ctrl+Zで止めたコマンドを「画面に出さずに裏で実行を続けたい」場合はbgを、「もう一度画面で操作したい」場合はfgを使うと覚えれば迷いません。

本記事のまとめ

やりたいこと コマンド
バックグラウンドでコマンドを実行する コマンド &
ジョブの一覧を表示する jobs
プロセスID付きでジョブを表示する jobs -l
ジョブをフォアグラウンドに戻す fg %ジョブ番号
停止中のジョブをバックグラウンドで再開する bg %ジョブ番号
ログアウト後も処理を継続する nohup コマンド &
実行中のジョブをシェルから切り離す disown %ジョブ番号

バックグラウンドジョブを安全にコントロールできていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。