このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linux基礎:コマンド練習23

コマンド練習23

 「コマンド練習23」では、7章の中盤で登場したコマンドについて 学びます。ここで扱うのは bg、fg、jobs です。これらは、シェルで実行中のジョブを制御するために利用されるコマンドであり、プロセスを効率的に管理するために不可欠です。

  • jobs … シェルで実行中または停止中のジョブの一覧を表示する。
  • bg … 停止中のジョブをバックグラウンドで再開する。
  • fg … 停止中またはバックグラウンド実行中のジョブをフォアグラウンドに戻す。

 これらのコマンドは、特に長時間動作する処理を一時停止・再開する場合や、バックグラウンドで複数の処理を並行させる場面でよく使われます。以下に詳しく解説し、練習問題と模範解答例を提示します。

コマンド解説

1.jobs コマンド

現在のシェルで実行中または停止中のジョブを表示します。

書式

jobs [オプション]

主なオプション

オプション説明
-lプロセスIDを含めて表示
-nステータスが変化したジョブのみ表示
-pプロセスIDのみ表示

2.bg コマンド

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

書式

bg [ジョブ番号]

3.fg コマンド

ジョブをフォアグラウンドで再開します。

書式

fg [ジョブ番号]

練習問題 + 模範解答例

問題1

 無限ループするスクリプト loop1.sh を作成し、フォアグラウンドで実行してください。その後 Ctrl+Z を押して停止し、jobs コマンドで確認してください。

模範解答例

[user@rocky9 ~]$ echo -e '#!/bin/bash\nwhile true; do echo "loop1"; sleep 3; done' > loop1.sh
[user@rocky9 ~]$ chmod +x loop1.sh
[user@rocky9 ~]$ ./loop1.sh
loop1
# Ctrl+Z を押す
^Z
[1]+  停止                  ./loop1.sh
[user@rocky9 ~]$ jobs
[1]+  停止                  ./loop1.sh

問題2

停止中の loop1.sh をバックグラウンドで再開してください。

模範解答例

[user@rocky9 ~]$ bg %1
[1]+ ./loop1.sh &
loop1

問題3

 バックグラウンドで動作している loop1.sh をフォアグラウンドに戻し、 loop1.sh を Ctrl+Z を押して停止してください。

模範解答例

[user@rocky9 ~]$ fg %1
# Ctrl+Z を押す
^Z
[1]+  停止                  ./loop1.sh

問題4

 新たに loop2.sh を作成し、バックグラウンドで実行して、jobs コマンドで複数ジョブを確認してください。

模範解答例

[user@rocky9 ~]$ echo -e '#!/bin/bash\nwhile true; do echo "loop2"; sleep 2; done' > loop2.sh
[user@rocky9 ~]$ chmod +x loop2.sh
[user@rocky9 ~]$ ./loop2.sh &
[2] 5179
loop2
[user@rocky9 ~]$ jobs
[1]+  停止                  ./loop1.sh
[2]-  実行中               ./loop2.sh &

問題5

 バックグラウンドで動作している loop2.sh をフォアグラウンドに戻し、 loop2.sh を Ctrl+Z を押して停止してください。

模範解答例

[user@rocky9 ~]$ fg %2
# Ctrl+Z を押す
^Z
[2]+  停止                  ./loop2.sh

問題6

 loop1.sh と loop2.sh の2つのジョブを、jobs -l を使ってジョブ番号と PID を含めて確認してください。

模範解答例

[user@rocky9 ~]$ jobs -l
[1]-  5137 停止                  ./loop1.sh
[2]+  5179 停止                  ./loop2.sh

まとめ

「コマンド練習23」では、7章の中盤で登場したコマンドについて 学びました。

  • jobs でジョブの一覧を表示
  • bg で停止中のジョブをバックグラウンドで再開
  • fg でジョブをフォアグラウンドに復帰

 これらを組み合わせることで、長時間の処理を効率的に制御し、シェル環境をより柔軟に活用できるようになります。