はじめに
こんにちは!今回はjobsコマンドについて解説します。
jobsは現在のシェルで実行中のバックグラウンドジョブを表示するコマンドです。複数のプロセスを同時に実行する時に、どのジョブが動いているのか確認するのに使います。
シェルの組み込みコマンドなので、シェルスクリプトでもよく使われます。バックグラウンド処理を管理する時には欠かせませんね!
jobsコマンドとは
jobsは、シェルに組み込まれたコマンドで、現在のシェルセッションで実行中または停止中のバックグラウンドジョブを表示します。
Linuxでは、コマンドを「&」でバックグラウンド実行できます。そうすると、複数のプロセスが同時に動作しますが、どのプロセスがどのジョブなのか、どのジョブが完了したのか確認するのがjobsコマンドの役割です。
フォアグラウンドとバックグラウンドの切り替えに使うfg、bgコマンドとセットで使うことが多いですね。
基本構文
|
|
jobspec: ジョブID(オプション)- 指定しなければ、すべてのジョブを表示
主なオプション
| オプション | 説明 |
|---|---|
-l |
プロセスIDも一緒に表示 |
-n |
状態が変わったジョブのみ表示 |
-p |
プロセスIDのみ表示 |
-r |
実行中のジョブのみ表示 |
-s |
停止中のジョブのみ表示 |
-x |
指定したコマンドを実行し、ジョブのプロセスIDに置き換える |
使用例
例1: 実行中のジョブを表示
|
|
実行結果:
|
|
バックグラウンドで実行中のジョブが表示されます。
例2: ジョブIDとプロセスIDを表示
|
|
実行結果:
|
|
-lオプションでプロセスID(PID)も表示します。
例3: 実行中のジョブのみ表示
|
|
実行結果:
|
|
完了したジョブは表示されません。
例4: 停止中のジョブのみ表示
|
|
実行結果:
|
|
Ctrl+Zで停止させたジョブのみが表示されます。
例5: プロセスIDのみ表示
|
|
実行結果:
|
|
プロセスIDだけが表示されるので、他のコマンドと組み合わせやすいです。
例6: バックグラウンドジョブを再開
|
|
実行結果:
|
|
ジョブID 1 をフォアグラウンドで再開します。
例7: 停止中のジョブをバックグラウンドで再開
|
|
実行結果:
|
|
停止中のジョブをバックグラウンドで再開します。
例8: 特定のジョブを表示
|
|
実行結果:
|
|
ジョブID 1 の情報のみを表示します。
例9: すべてのジョブをkill
|
|
実行結果:
|
|
実行中のすべてのジョブを一括で終了させます。
例10: 状態が変わったジョブのみ表示
|
|
実行結果:
|
|
前回の実行時から状態が変わったジョブのみが表示されます。
Tips・注意点
ジョブIDとプロセスIDの違い
ジョブID([1]など)はシェル側で管理される番号で、プロセスID(PIDなど)はOSレベルで管理される番号です。別物です。
|
|
%記号の使い方
ジョブを指定する時は、%記号を使います:
|
|
フォアグラウンドとバックグラウンドの切り替え
|
|
ターミナル終了時の注意
ターミナルを閉じると、バックグラウンドジョブも終了してしまいます。長時間実行が必要な場合は、nohupを使ってください。
実践的な使い方
複数のバックアップを並列実行
|
|
複数のバックアップを同時に実行して、進行状況を確認します。
ファイルダウンロードを並列実行
|
|
複数のファイルを同時にダウンロード。プロセスIDも確認できます。
停止中のプロセスをバックグラウンドで再開
|
|
意図せず停止させたプロセスを再開できます。
すべてのバックグラウンドジョブの完了を待つ
|
|
waitコマンドですべてのバックグラウンドジョブの完了を待ちます。
まとめ
jobsコマンドのポイント:
- シェルの組み込みコマンド
- バックグラウンドジョブの状態を表示
- -l: プロセスIDも表示
- -r: 実行中のジョブのみ
- -s: 停止中のジョブのみ
- -p: プロセスIDのみ表示
- よく使う組み合わせ:
fg %1,bg %2,jobs -l
バックグラウンド処理を管理する時に不可欠なコマンド。複数のタスクを同時実行する際は、jobsコマンドで進捗を確認しながら作業を進めましょう!