[Linux] fgコマンドの使い方 – ジョブのフォアグラウンド化

fgコマンドは、バックグラウンドで実行中のジョブをフォアグラウンドに戻すために使用されます。

ジョブは、シェルで&を使ってバックグラウンドで実行されたプロセスです。

fgコマンドを単独で実行すると、最も最近バックグラウンドに送られたジョブがフォアグラウンドに戻ります。

特定のジョブを指定する場合は、fg %[ジョブ番号]の形式で使用します。

ジョブ番号はjobsコマンドで確認できます。

この記事でわかること
  • fgコマンドの基本的な使い方
  • ジョブ番号の指定方法と確認方法
  • 複数ジョブの管理と切り替え方
  • fgコマンドと他のコマンドの連携
  • 応用例を通じた実践的な活用法

目次から探す

fgコマンドとは

fgコマンドは、LinuxやUnix系のシステムで使用されるシェルコマンドの一つで、バックグラウンドで実行中のジョブをフォアグラウンドに戻すために使用されます。

シェルでは、複数のプロセスを同時に管理することができ、特に長時間実行されるタスクや複数の作業を同時に行う際に便利です。

fgコマンドを使うことで、ユーザーは特定のジョブに対して直接操作を行うことができ、入力や出力をリアルタイムで確認しながら作業を進めることが可能になります。

これにより、作業の効率が向上し、必要に応じてジョブの状態を簡単に切り替えることができます。

fgコマンドは、シェルのジョブ制御機能の一部として、特にBashシェルで広く利用されています。

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

最も最近のジョブをフォアグラウンドに戻す

最も最近にバックグラウンドで実行したジョブをフォアグラウンドに戻すには、単にfgと入力するだけです。

これにより、最後に停止またはバックグラウンドに移動したジョブが再びアクティブになります。

fg

このコマンドを実行すると、最近のジョブがフォアグラウンドで実行され、ユーザーはそのジョブに対して直接操作を行うことができます。

特定のジョブをフォアグラウンドに戻す

複数のジョブがバックグラウンドで実行されている場合、特定のジョブをフォアグラウンドに戻すには、ジョブ番号を指定します。

ジョブ番号は、jobsコマンドを使用して確認できます。

以下のように、ジョブ番号を指定してfgコマンドを実行します。

fg %1

ここで、%1はジョブ番号を示しており、1番目のジョブをフォアグラウンドに戻します。

ジョブ番号の確認方法(jobsコマンドの使い方)

バックグラウンドで実行中のジョブの一覧を確認するには、jobsコマンドを使用します。

このコマンドを実行すると、現在のシェルセッションで管理されているすべてのジョブが表示されます。

各ジョブには、ジョブ番号とその状態(実行中、停止中など)が表示されます。

jobs
[1]+  Running                 sleep 100 &
[2]-  Stopped                 nano

この出力から、ジョブ番号を確認し、必要に応じてfgコマンドで特定のジョブをフォアグラウンドに戻すことができます。

fgコマンドのオプションと引数

ジョブ番号の指定方法

fgコマンドでは、特定のジョブをフォアグラウンドに戻すためにジョブ番号を指定することができます。

ジョブ番号は、jobsコマンドを使用して確認できます。

ジョブ番号は、%記号を前に付けて指定します。

例えば、ジョブ番号が1の場合、以下のように入力します。

fg %1

このコマンドを実行すると、ジョブ番号1のプロセスがフォアグラウンドで実行されます。

ジョブ番号は、jobsコマンドで確認した順序に基づいています。

複数ジョブがある場合の操作

複数のジョブがバックグラウンドで実行されている場合、fgコマンドを使って特定のジョブを選択することが重要です。

jobsコマンドで表示されたジョブのリストから、目的のジョブの番号を確認し、その番号を指定してfgコマンドを実行します。

jobs
fg %2

この例では、jobsコマンドで表示された2番目のジョブをフォアグラウンドに戻しています。

複数のジョブがある場合は、正しい番号を指定することで、意図したジョブを操作できます。

fgコマンドのエラーメッセージと対処法

fgコマンドを使用する際に、いくつかのエラーメッセージが表示されることがあります。

主なエラーメッセージとその対処法は以下の通りです。

スクロールできます
エラーメッセージ原因対処法
fg: no job control in this shellジョブ制御が無効になっているジョブ制御を有効にするために、bashを使用する
fg: %1: no such job指定したジョブ番号が存在しないjobsコマンドでジョブ番号を確認する
fg: job has terminated指定したジョブが終了している新しいジョブを開始する

これらのエラーメッセージが表示された場合は、原因を確認し、適切な対処を行うことで、fgコマンドを正しく使用することができます。

fgコマンドの実行例

単一ジョブのフォアグラウンド化

単一のバックグラウンドジョブをフォアグラウンドに戻す場合、fgコマンドを単独で使用します。

例えば、sleepコマンドをバックグラウンドで実行しているとします。

以下のように実行します。

sleep 100 &
fg

このコマンドを実行すると、sleep 100がフォアグラウンドで実行され、ユーザーはそのプロセスに対して直接操作を行うことができます。

複数ジョブの管理とフォアグラウンド化

複数のジョブがバックグラウンドで実行されている場合、jobsコマンドを使ってジョブの状態を確認し、特定のジョブをフォアグラウンドに戻すことができます。

以下の手順で実行します。

  1. 複数のジョブをバックグラウンドで実行します。
sleep 100 &
   nano &
  1. jobsコマンドでジョブの一覧を確認します。
jobs
[1]+  Running                 sleep 100 &
   [2]-  Running                 nano &
  1. 特定のジョブをフォアグラウンドに戻します。
fg %1

この例では、1番目のジョブであるsleep 100がフォアグラウンドに戻ります。

fgコマンドと他のジョブ管理コマンドの組み合わせ

fgコマンドは、他のジョブ管理コマンドと組み合わせて使用することで、より効率的にプロセスを管理できます。

例えば、bgコマンドを使ってジョブをバックグラウンドに移動させ、その後fgコマンドで再度フォアグラウンドに戻すことができます。

以下の手順で実行します。

  1. ジョブをバックグラウンドで実行します。
sleep 100 &
  1. jobsコマンドでジョブの状態を確認します。
jobs
  1. ジョブをバックグラウンドに移動させます。
bg %1
  1. 必要に応じて、再度フォアグラウンドに戻します。
fg %1

このように、fgコマンドは他のジョブ管理コマンドと連携して使用することで、複数のプロセスを効率的に管理することができます。

fgコマンドと他のジョブ管理コマンドの連携

bgコマンドとの併用

bgコマンドは、バックグラウンドで実行中のジョブを再開するために使用されます。

fgコマンドと併用することで、ジョブの状態を柔軟に管理できます。

例えば、あるジョブを一時停止させた後、バックグラウンドで実行し続けることができます。

以下の手順で実行します。

  1. ジョブをバックグラウンドで実行します。
sleep 100 &
  1. ジョブを一時停止します。
kill -STOP %1
  1. 一時停止したジョブをバックグラウンドで再開します。
bg %1

このように、bgコマンドを使うことで、ジョブをバックグラウンドで再開し、他の作業を行うことができます。

killコマンドとの併用

killコマンドは、特定のプロセスを終了させるために使用されます。

fgコマンドと組み合わせることで、フォアグラウンドで実行中のジョブを終了させることができます。

以下の手順で実行します。

  1. ジョブをフォアグラウンドで実行します。
sleep 100
  1. 別のターミナルで、実行中のプロセスを確認します。
ps aux | grep sleep
  1. プロセスIDを取得し、killコマンドで終了させます。
kill <プロセスID>

このように、killコマンドを使用することで、フォアグラウンドで実行中のジョブを強制的に終了させることができます。

disownコマンドとの違いと使い分け

disownコマンドは、シェルのジョブ管理から特定のジョブを削除するために使用されます。

これにより、ジョブがシェルの終了時に自動的に終了しないようにすることができます。

fgコマンドとは異なり、disownを使用すると、ジョブはバックグラウンドで実行され続けますが、シェルからは管理されなくなります。

  • fgコマンド: バックグラウンドジョブをフォアグラウンドに戻し、ユーザーが直接操作できるようにします。
  • disownコマンド: ジョブをシェルの管理から外し、シェルが終了してもジョブが続行されるようにします。

使い分けの例として、長時間実行されるプロセスをシェルの管理から外したい場合はdisownを使用し、特定のジョブを操作したい場合はfgを使用します。

これにより、シェルの状態に応じて適切なコマンドを選択することができます。

fgコマンドの応用例

長時間実行されるプロセスの管理

長時間実行されるプロセスを管理する際、fgコマンドは非常に便利です。

例えば、データのバックアップや大規模なデータ処理など、時間がかかるタスクをバックグラウンドで実行し、必要に応じてフォアグラウンドに戻すことができます。

以下の手順で実行します。

  1. バックグラウンドで長時間実行されるプロセスを開始します。
tar -czf backup.tar.gz /path/to/directory &
  1. プロセスが実行中の間に他の作業を行います。
  2. プロセスの進行状況を確認したい場合、fgコマンドでフォアグラウンドに戻します。
fg

このように、長時間実行されるプロセスをバックグラウンドで実行しつつ、必要に応じてフォアグラウンドに戻すことで、効率的に作業を進めることができます。

複数のジョブを効率的に切り替える方法

複数のジョブを同時に管理する場合、fgコマンドを使って効率的に切り替えることができます。

例えば、異なるタスクを同時に実行し、必要に応じてそれぞれのタスクに戻ることができます。

以下の手順で実行します。

  1. 複数のジョブをバックグラウンドで実行します。
sleep 100 &
   nano &
  1. jobsコマンドでジョブの状態を確認します。
jobs
  1. 特定のジョブをフォアグラウンドに戻します。
fg %1

このように、複数のジョブをバックグラウンドで実行し、必要に応じてfgコマンドで切り替えることで、効率的に作業を進めることができます。

fgコマンドを使ったスクリプトの制御

fgコマンドは、スクリプト内でのプロセス制御にも利用できます。

スクリプト内でバックグラウンドジョブを実行し、特定の条件に応じてフォアグラウンドに戻すことができます。

以下は、スクリプトの一例です。

#!/bin/bash
# バックグラウンドで長時間実行されるプロセス
long_running_process &
# プロセスのIDを取得
pid=$!
# 条件に応じてフォアグラウンドに戻す
if [ some_condition ]; then
    fg %$pid
fi

このスクリプトでは、長時間実行されるプロセスをバックグラウンドで開始し、特定の条件が満たされた場合にそのプロセスをフォアグラウンドに戻します。

これにより、スクリプトの実行中に動的にプロセスを制御することが可能になります。

よくある質問

fgコマンドでジョブが見つからない場合はどうすればいい?

fgコマンドを実行した際に「ジョブが見つからない」というエラーメッセージが表示される場合、以下の点を確認してください。

  • ジョブが存在するか確認: jobsコマンドを使用して、現在のシェルセッションで実行中のジョブを確認します。

ジョブがリストに表示されていない場合、すでに終了しているか、別のシェルで実行されている可能性があります。

  • ジョブ番号の指定: 特定のジョブを指定する場合、正しいジョブ番号を使用しているか確認します。

ジョブ番号は%記号を前に付けて指定します。

fgコマンドでフォアグラウンドに戻したジョブを再度バックグラウンドにするには?

フォアグラウンドに戻したジョブを再度バックグラウンドにするには、Ctrl + Zを押してジョブを一時停止させ、その後bgコマンドを使用してバックグラウンドで再開します。

手順は以下の通りです。

  1. フォアグラウンドで実行中のジョブを一時停止します。
  • Ctrl + Zを押す。
  1. bgコマンドを使用して、バックグラウンドで再開します。
bg

この手順により、フォアグラウンドで実行中のジョブをバックグラウンドに戻すことができます。

fgコマンドでフォアグラウンドに戻したジョブが停止してしまうのはなぜ?

フォアグラウンドに戻したジョブが停止してしまう原因はいくつかあります。

主な理由は以下の通りです。

  • シグナルによる停止: フォアグラウンドで実行中のジョブが、SIGSTOPシグナルを受け取ると停止します。

これは、killコマンドを使用して意図的に送信することもできます。

  • ユーザーの操作: ユーザーがCtrl + Zを押すことで、ジョブが一時停止します。

この場合、再度fgコマンドを使用してフォアグラウンドに戻すことができます。

  • リソースの制約: システムのリソースが不足している場合、プロセスが自動的に停止することがあります。

この場合、リソースを解放するか、他のプロセスを終了させる必要があります。

これらの要因を確認し、必要に応じて対処することで、フォアグラウンドに戻したジョブが停止する問題を解決できます。

まとめ

この記事では、fgコマンドの基本的な使い方や他のジョブ管理コマンドとの連携方法、さらには応用例について詳しく解説しました。

これにより、LinuxやUnix系システムでのプロセス管理がより効率的に行えるようになります。

今後は、実際の作業環境でfgコマンドを活用し、バックグラウンドとフォアグラウンドの切り替えをスムーズに行ってみてください。

  • URLをコピーしました!
目次から探す