Linuxで作業中に時間のかかる処理をバックグラウンドで実行したことはありませんか?たとえば、圧縮処理やファイル転送など、しばらく時間がかかるコマンドをバックグラウンドで走らせておくことで、作業効率がぐっと上がります。
そんなときに活躍するのが「jobs」コマンドです。現在実行中のバックグラウンドジョブの状態を簡単に確認でき、他のコマンドと組み合わせれば、より柔軟な操作が可能です。
この記事では、Linuxの「jobs」コマンドの基本的な使い方から応用的な利用方法、さらに関連する「fg」「bg」「kill」などのコマンドとの連携まで、わかりやすく解説します。
jobsコマンドとは?
「jobs」コマンドは、シェル(主にbashやzsh)で実行中のジョブの状態を確認するためのコマンドです。ここでいう「ジョブ」とは、主にバックグラウンドで実行されているプロセスを指します。
バックグラウンドジョブは、コマンドの末尾に「&」を付けることで起動できます。たとえば以下のようなコマンドです:
sleep 60 &
このコマンドは、60秒間待機する「sleep」処理をバックグラウンドで実行します。jobsコマンドは、このようにバックグラウンドで実行中のプロセスの一覧を表示してくれます。
jobsコマンドの基本的な使い方
基本構文はとてもシンプルです:
jobs
このコマンドを実行するだけで、現在のシェルで管理しているバックグラウンドジョブの一覧が表示されます。表示される情報には以下のような内容が含まれます:
[番号]
:ジョブID状態
:Running(実行中)、Stopped(停止中)などコマンド
:実行されたコマンド内容
例:
[1]+ Running sleep 60 &
この表示は、ジョブ番号1のプロセスが実行中であることを意味しています。
ジョブの状態とは?
「jobs」コマンドでは、ジョブの状態を確認することができます。代表的な状態は以下の通りです。
Running
:現在も実行中のプロセスStopped
:一時停止(Ctrl+Zで停止させたジョブなど)Done
:完了済みのジョブ
「Done」と表示されたジョブは、次回jobsコマンドを打つと消えていることがあります。これは、ジョブの終了後、シェルが管理から外すためです。
fgとbgでジョブを操作する
jobsコマンドと併せてよく使われるのが、fg
とbg
です。
fg(フォアグラウンドへ)
一時停止しているジョブやバックグラウンドジョブをフォアグラウンドに戻すには、fg
コマンドを使います。
fg %1
これは、ジョブ番号1のジョブをフォアグラウンドに戻すという意味です。
bg(バックグラウンドで再開)
停止中のジョブをバックグラウンドで再開するには、bg
を使用します。
bg %1
一時停止中(Stopped)のジョブを再開させたいときに便利です。
ジョブを終了させるには?killコマンドの使い方
「jobs」コマンドでジョブ一覧を確認したあと、不要なジョブを終了させたいこともあります。
その場合は、「kill」コマンドを使ってジョブ番号を指定して終了させることができます。
kill %1
ジョブ番号1を終了させる例です。バックグラウンドで動いているジョブでも停止中のジョブでも使用可能です。
なお、確実にプロセスを終了させたい場合は、-9
オプションを使うこともありますが、これは「強制終了」となるため注意が必要です。
kill -9 %1
ジョブ番号とプロセスID(PID)の違いに注意
ジョブ番号(%1など)と、プロセスID(PID)は異なるものです。jobsコマンドで確認できるのは「ジョブ番号」ですが、ps
コマンドなどで確認できるのは「PID」です。
ps
などでPIDを確認し、必要に応じて以下のようにプロセスを終了することもできます。
kill 12345 # PIDで指定
よくあるエラーとその対処法
エラー1:no such job
fg %2
bash: fg: %2: no such job
このエラーは、指定したジョブ番号が存在しない場合に出ます。すでに完了した、または存在しないジョブ番号を指定していないか確認しましょう。
エラー2:permission denied
kill
コマンドでプロセスを終了しようとして「Permission denied」と表示される場合、現在のユーザーにそのプロセスを操作する権限がない可能性があります。この場合はsudoを使います。
sudo kill %1
応用:複数のジョブを同時に管理する
複数のジョブをバックグラウンドで動かし、順次確認や操作をする際にも、jobsは非常に便利です。
sleep 30 &
sleep 45 &
sleep 60 &
上記のように3つ同時にバックグラウンド処理を実行し、それぞれの状態を以下で確認します。
jobs
必要に応じて、特定のジョブだけ停止、再開、終了といった操作を行うことができます。
まとめ:jobsを使いこなせば作業効率アップ
「jobs」コマンドは、Linuxのシェルで複数のバックグラウンドジョブを扱う際の強力なツールです。fg
やbg
、kill
コマンドと組み合わせることで、柔軟なジョブ管理が可能になります。
特に複数の処理を並行して行いたいときや、作業の合間に重い処理を回したいときには、jobsを活用すると効率的です。
ぜひ日常のコマンド操作に取り入れて、ターミナル操作の幅を広げてみてください。