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

LinuxBeginner
オンラインで実践に進む

はじめに

Linux オペレーティングシステムでは、マルチタスクはユーザーが複数のプロセスを同時に実行できるようにする重要な機能です。Linux ターミナルの強力な機能の 1 つにジョブコントロール(job control)があります。これは、プロセスをバックグラウンドで実行し、必要に応じてフォアグラウンドに戻すことでプロセスを管理する機能です。

この実験(Lab)では、Linux のジョブコントロールについて紹介します。特に、バックグラウンドタスクをフォアグラウンドに戻すプロセスに焦点を当てます。バックグラウンドでタスクを開始する方法、実行中のジョブを一覧表示する方法、および fg コマンドを使用して特定のタスクをフォアグラウンドに戻す方法を学びます。これらのスキルは、Linux 環境で長時間実行される操作を行う際の生産性向上に役立ちます。

バックグラウンドタスクの作成と実行

このステップでは、長時間実行されるタスクをシミュレートするスクリプトを作成し、バックグラウンドで実行する方法を学びます。

フォアグラウンドプロセスとバックグラウンドプロセスの違いを理解する

Linux ターミナルでは、プロセスはフォアグラウンドまたはバックグラウンドで実行できます。

  • フォアグラウンドプロセス:コマンドがフォアグラウンドで実行されると、それが完了するまでターミナルを占有します。完了するまで他のコマンドを実行できません。
  • バックグラウンドプロセス:コマンドがバックグラウンドで実行されると、「裏で」実行され、ターミナルは他のタスクに使用できます。

まず、プロジェクトディレクトリに移動しましょう。

cd ~/project

次に、長時間実行されるタスクをシミュレートする簡単なスクリプトを作成しましょう。これを使用して、バックグラウンドとフォアグラウンドの操作をデモンストレーションします。

nano long_running_task.sh

nano エディタで、次のコードを入力します。

#!/bin/bash
echo "Starting a long task..."
sleep 60 ## This will pause for 60 seconds
echo "Task completed."

ファイルを保存するには、Ctrl+O を押して Enter を押し、次に Ctrl+X を押して nano を終了します。

次に、次のコマンドでスクリプトを実行可能にします。

chmod +x long_running_task.sh

コマンドの末尾にアンパサンド (&) を追加することで、このスクリプトをバックグラウンドで実行しましょう。

./long_running_task.sh &

次のような出力が表示されるはずです。

[1] 1234
Starting a long task...

角括弧 [1] 内の数字はジョブ番号で、その後の数字(この例では 1234)はプロセス ID です。これで、スクリプトがバックグラウンドで実行されている間、ターミナルは他のコマンドを入力するために使用できます。

複数のバックグラウンドジョブの管理

このステップでは、複数のバックグラウンドタスクを開始し、その状態を確認する方法を学びます。

まず、スクリプトの別のインスタンスをバックグラウンドで起動しましょう。

./long_running_task.sh &

別のジョブ番号とプロセス ID が表示され、「Starting a long task...」のメッセージも表示されるはずです。

バックグラウンドジョブの確認

バックグラウンドで実行中のすべてのジョブのリストを表示するには、jobs コマンドを使用します。

jobs

出力は次のようになるはずです。

[1]-  Running                 ./long_running_task.sh &
[2]+  Running                 ./long_running_task.sh &

これは以下を示しています。

  • 角括弧 [1][2] 内のジョブ番号
  • 各ジョブの状態 (Running)
  • 実行されたコマンド
  • + 記号は「現在の」ジョブ(最も最近に開始または使用されたジョブ)を示します
  • - 記号は、現在のジョブが完了した場合に現在のジョブになるジョブを示します

3 つ目のバックグラウンドジョブを起動しましょう。

./long_running_task.sh &

再度ジョブリストを確認します。

jobs

これで、リストに 3 つの実行中のジョブが表示されるはずです。

ジョブをフォアグラウンドに移動する

このステップでは、fg コマンドを使用してバックグラウンドジョブをフォアグラウンドに移動する方法を学びます。

fg コマンドの使用

fg コマンドは、バックグラウンドジョブをフォアグラウンドに移動し、ターミナルでアクティブなプロセスにします。ジョブがフォアグラウンドにあるとき、キーボードからの入力を受け取ることができ、その出力はターミナルに直接表示されます。

最新のバックグラウンドジョブ(jobs 出力で + でマークされたジョブ)をフォアグラウンドに移動するには、次のように入力します。

fg

コマンドがフォアグラウンドで実行されているのが見えるはずで、コマンドが完了するまでターミナルは占有されます。出力は次のようになります。

./long_running_task.sh

タスクがまだ実行中の場合は、完了するまで待つ必要があります。完了すると、次のように表示されます。

Task completed.

フォアグラウンドプロセスが完了する前に中断する必要がある場合は、Ctrl+C を押します。

別のバックグラウンドジョブを起動しましょう。

./long_running_task.sh &

現在のジョブリストを確認します。

jobs

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

このステップでは、ジョブ番号を使用して特定のバックグラウンドジョブをフォアグラウンドに移動する方法を学びます。

ジョブ番号を指定した fg コマンドの使用

複数のバックグラウンドジョブがある場合、fg コマンドにジョブ番号を指定することで、特定のジョブをフォアグラウンドに移動することができます。

まず、複数のジョブが実行中であることを確認しましょう。いくつかの新しいバックグラウンドタスクを起動します。

./long_running_task.sh &
./long_running_task.sh &

ジョブのリストとその番号を確認します。

jobs

特定のジョブをフォアグラウンドに移動するには、fg %ジョブ番号 の形式を使用します。たとえば、ジョブ番号 1 のジョブをフォアグラウンドに移動するには、次のように入力します。

fg %1

出力には、フォアグラウンドで実行されているコマンドが表示されます。

./long_running_task.sh

タスクが完了するのを待つか、Ctrl+C を押して中断します。

次に、別のジョブをフォアグラウンドに移動してみましょう。たとえば、ジョブ番号 2 のジョブがある場合、次のように入力します。

fg %2

この手法は、複数のタスク間を切り替える必要があり、必要に応じて特定のプロセスに注目する場合に便利です。

まとめ

この実験では、Linux 環境でプロセスを管理するための重要なスキルを学びました。

  1. バックグラウンドタスクの作成と実行:長時間実行される操作をシミュレートするスクリプトを作成し、& 記号を使用してバックグラウンドで実行する方法を学びました。

  2. 複数のバックグラウンドジョブの管理:複数のバックグラウンドタスクを起動し、jobs コマンドを使用してその状態を確認する方法を学びました。

  3. ジョブをフォアグラウンドに移動するfg コマンドを使用して、最新のジョブまたはジョブ番号を指定して特定のジョブをフォアグラウンドに移動する方法を学びました。

これらのジョブ制御技術は、Linux での効率的なマルチタスクの基礎となります。これらにより、以下のことが可能になります。

  • ターミナルを占有することなく時間のかかるプロセスを実行する
  • 複数の操作を同時に監視する
  • 必要に応じてタスクを切り替える
  • ワークフローをより効果的に管理する

Linux システムでの作業を続けるにつれて、これらのコマンドは、特にサーバーで作業したり、スクリプトを実行したり、複数のプロセスを管理したりする際に、日常の操作において非常に有用なツールになります。