Linux / コマンド / fg - シェルのジョブをフォアグラウンドに持ってくる

fgは、現在のシェルのバックグラウンドまたは停止中のジョブをフォアグラウンドに持ってきます。そのジョブが端末入力を再び受け取るようにしたり、直接状態を確認するときに使用します。

フォアグラウンドに持ってくると、シェルプロンプトはジョブが終了するか再び停止されるまで待ちます。対象は jobsの番号と状態 で確認します。fgの対象はPIDではなく、現在のシェルのジョブ指定子です。

基本的な文法

fg [%ジョブ番号]

インストールされている実装とオプションは、配布版によって異なる場合があります。help fgで現在のシステムの説明を確認してください。

使用例

現在のシェルジョブの確認

ジョブ制御が有効な対話型Bashで試します。実習用には sleep 60 & を開始してから、一覧でそのジョブ番号を確認できます。例の1を実際の番号へ置き換えてください。

jobs -l

特定のジョブを前に持ってくる

例のジョブ番号を実際の値に置き換えます。

fg %1

ジョブを再び停止したり終了する

一般的な端末設定では Ctrl+Z が一時停止を要求し、Ctrl+C が割り込みシグナルSIGINTを送ります。応答はプログラムにも依存します。以下の jobs はシェルのプロンプトへ戻ってから実行します。

jobs

バックグラウンドのジョブを前面へ戻す

fgは現在のシェルのジョブを端末の前面に持ってきて入力を受けるか、完了するまで待たせます。ジョブ番号はまずjobsで確認します。

jobs
fg %1

Vimが使える環境なら、実習用の vim notes.txt を Ctrl+Z で一時停止した後、fg %1で持ってくると、エディタの画面が端末に再び表示されます。画面や戻りのタイミングはそのプログラムによって異なるため、固定された1行の出力はありません。

fgは他の端末の任意のPIDを持ってくるコマンドではありません。ジョブがすでに終わっている場合や現在のシェルのジョブでない場合は持ってくることはできません。実行中のプログラムを再び停止させるには、通常は Ctrl+Z を使います。前面へ戻さずバックグラウンドで再開したい場合は bgによるジョブの再開 を使い分けます。

主なオプションと形式

オプション・形式 説明
%N 現在のシェルのジョブ番号Nを指定します。
%+ 現在のジョブを選択します。
%- 前のジョブを選択します。
引数 省略 現在のジョブを対象とします。

使用する際の注意点

現在のシェルが管理していないプロセスはfgに取り込むことはできません。非対話型環境ではジョブ制御がオフになっている場合があります。長いジョブをターミナル終了後も維持したい場合はfgの代わりにtmuxによる端末セッションの管理 やサービス管理の方法を検討してください。

よくある質問

fg %1で%1はPIDですか?

いいえ。現在のシェルのジョブ番号です。jobsの出力に表示された番号を使用します。

公式ドキュメント

オプションの正確な動作や実装ごとの差異は、fgに関する公式ドキュメントで確認できます。