bgコマンドとfgコマンドの違いを初心者向けに解説!Linuxのプロセス管理入門
生徒
「先生、Linuxでプログラムを実行するとき、途中で止めたりバックグラウンドで動かしたりできるって聞いたんですが、どういうことですか?」
先生
「それはプロセス管理の話です。Linuxでは、実行中のプログラムを前面(フォアグラウンド)で動かすか、裏側(バックグラウンド)で動かすかを切り替えることができます。ここで使うのがbgとfgコマンドです。」
生徒
「えっと、バックグラウンドって具体的にはどういうイメージですか?」
先生
「たとえば、料理をしながら音楽を聴くイメージです。料理がメインで、音楽は裏で流れている。Linuxのバックグラウンドジョブも同じで、他の作業をしながらプログラムを動かせます。」
1. フォアグラウンドとバックグラウンドの違い
Linuxでプログラムを実行すると、通常はターミナル上で操作できるフォアグラウンドで動きます。この状態では、プログラムが終わるまで次のコマンドは入力できません。逆に、バックグラウンドで動かすと、プログラムが動いている間もターミナルで別の作業ができます。
コマンド例として、長時間動くプログラムをバックグラウンドで実行するには、実行時に&を使います。
sleep 30 &
[1] 12345
上記の例では、sleepコマンドが30秒間バックグラウンドで実行され、プロセス番号12345が割り当てられました。
2. bgコマンドとは?
bgコマンドは、一時停止(中断)されているジョブをバックグラウンドで再開するためのコマンドです。プログラムを一時停止するにはCtrl+Zを使います。
sleep 60
^Z
[1]+ Stopped sleep 60
この状態でbgを実行すると、ジョブはバックグラウンドで動き始めます。
bg %1
[1]+ sleep 60 &
これで、ターミナルを使いながらsleep 60が裏で実行され続けます。
3. fgコマンドとは?
fgコマンドは、バックグラウンドで動いているジョブをフォアグラウンドに戻して操作するためのコマンドです。たとえば、先ほどのsleep 60をフォアグラウンドで再度操作したいときに使います。
fg %1
sleep 60
フォアグラウンドに戻ると、ジョブはターミナルの制御下で動作するため、必要に応じてCtrl+Cで中断できます。
4. jobsコマンドでジョブを確認する
どのジョブがバックグラウンドで動いているかを確認するにはjobsコマンドを使います。
jobs
[1]+ Running sleep 60 &
ここで表示された番号(例: %1)を使ってfgやbgを操作できます。
5. bgとfgの使い分けのイメージ
簡単に言うと、
- bg: 一時停止したジョブをバックグラウンドで再開する。ターミナルを使える状態でプログラムを裏で動かす。
- fg: バックグラウンドジョブをフォアグラウンドに戻す。ターミナルでジョブを直接操作したいときに使う。
つまり、bgは「裏で走らせる」、fgは「前に出す」というイメージです。
6. 実践例:バックグラウンドでダウンロードをしながら作業する
たとえば、大きなファイルをダウンロードしながら別の作業をしたい場合があります。このときwgetコマンドとbgを組み合わせます。
wget http://example.com/largefile.zip
^Z
bg %1
[1]+ wget http://example.com/largefile.zip &
これでダウンロードをバックグラウンドで進めながら、ターミナルで別のコマンドを実行できます。
7. 複数ジョブの管理
複数のジョブがある場合、番号を指定して操作します。
jobs
[1]- Running sleep 60 &
[2]+ Stopped sleep 120
fg %2
sleep 120
このように、ジョブ番号を使えば複数のプログラムを自由にフォアグラウンド・バックグラウンドで切り替えられます。
8. Ctrl+Z, Ctrl+Cとの組み合わせ
ここで覚えておくと便利な操作は
Ctrl+Z:ジョブを一時停止してバックグラウンド操作可能にするCtrl+C:ジョブを終了する
たとえば、フォアグラウンドで実行中のsleep 100を一時停止して裏で動かす場合、
sleep 100
^Z
bg %1
[1]+ sleep 100 &
ターミナルで他の作業を続けながら、ジョブは裏で動き続けます。
9. bgとfgを使いこなすコツ
バックグラウンドとフォアグラウンドを自在に切り替えると、Linuxでの作業効率が大幅に上がります。特に長時間処理や複数タスクを同時に実行するときに便利です。ポイントは、
- ジョブ番号を確認する
jobs - 必要に応じて
fgで操作 - 不要なジョブは
killで終了
初心者でも、これらの操作を順を追って覚えれば、Linuxで複数プロセスを管理できるようになります。
まとめ
本記事では、Linuxのプロセス管理におけるbgコマンドとfgコマンドの使い方を初心者向けに解説しました。まず、フォアグラウンドとバックグラウンドの違いを理解することが重要です。フォアグラウンドではプログラムがターミナルの制御下で動作し、他のコマンド入力はできません。一方でバックグラウンドでは、プログラムを裏で実行しながらターミナルで別の作業を進めることができます。&を使ったバックグラウンド実行やCtrl+Zでの一時停止、そしてbgコマンドでの再開方法を紹介しました。また、fgコマンドを使えばバックグラウンドで動いているジョブをフォアグラウンドに戻し、直接操作や中断が可能です。複数ジョブの管理やjobsコマンドでのジョブ確認も重要なポイントで、ジョブ番号を指定して柔軟に操作できることも解説しました。さらに、Ctrl+Cによるジョブの終了や、長時間の処理を並行して行う方法も理解しておくと、Linuxでの作業効率が大幅に向上します。初心者がLinuxを学ぶ際には、まずこの一連の流れを実際にターミナルで試してみることが最も効果的です。
サンプルコマンドまとめ
# 長時間ジョブをバックグラウンドで実行
sleep 120 &
[1] 23456
# 一時停止したジョブをバックグラウンドで再開
sleep 300
^Z
bg %1
[1]+ sleep 300 &
# バックグラウンドジョブをフォアグラウンドで操作
fg %1
sleep 300
# 現在のジョブ確認
jobs
[1]+ Running sleep 300 &
[2]- Stopped sleep 120
これらの操作を組み合わせることで、複数のジョブを効率的に管理できるようになります。
生徒
「先生、今日はbgとfgの違いを学びましたけど、バックグラウンドとフォアグラウンドってすごく便利ですね。ターミナルで他の作業をしながらプログラムが実行できるのがいいです。」
先生
「その通りです。特に複数ジョブを同時に管理したり、長時間処理を並行して進める場合に役立ちます。ポイントはジョブ番号の管理とjobsコマンドでの確認です。」
生徒
「なるほど。ジョブ番号を確認してfgやbgで操作すれば、途中で止めたジョブも再開できるんですね。」
先生
「そうです。さらにCtrl+Zで一時停止、Ctrl+Cで終了も覚えておくと、作業の自由度が広がります。Linux初心者でも、まずは短いジョブで練習して慣れていくことが大切です。」
生徒
「今日はバックグラウンドジョブの管理の流れがよくわかりました。これで長時間の処理を別作業と並行して実行できそうです。」
先生
「その感覚が身につけば、Linuxでの作業効率は格段に上がります。ぜひ色々なコマンドと組み合わせて試してみてください。」