【Linux入門】フォアグラウンドとバックグラウンド

ジョブとは

 ジョブとは、ユーザから見た処理の単位を指します。Linuxシステム上で実行されるプロセスやコマンドの単位として扱われます。例えば、パイプで複数のコマンドをつないで実行する場合、それらを1つのジョブとして扱います。

フォアグラウンドジョブ

 フォアグラウンドジョブは、ユーザが直接操作する対話型のジョブです。コマンドを実行すると、その処理が端末上で実行され、その終了を待つ必要があります。例えば、ターミナル上で ls コマンドを実行すると、その結果が表示されるまで次のコマンドを実行することはできません。

 ls コマンド自体は一瞬で実行が完了してしまうため、バックグラウンドで実行するメリットを体感することができませんが、実行に時間がかかるコマンドでは、バックグラウンドで実行するメリットを体感することができます。

フォアグラウンドジョブの実行例

 フォアグラウンドジョブは、ユーザが直接操作する対話型のジョブです。以下は、フォアグラウンドでジョブを実行する例です。

例1: ls コマンドの実行

 この場合、ls コマンドがフォアグラウンドで実行され、カレントディレクトリ内のファイルとディレクトリのリストが表示されます。

$ ls
Desktop  Documents  Downloads  Music  Pictures  Videos

例2: テキストエディタの起動

 この場合、nano テキストエディタがフォアグラウンドで起動され、example.txt ファイルを編集するためのインターフェースが表示されます。ユーザがこのテキストエディタを操作する間、他のコマンドの実行はブロックされます。

$ nano example.txt

バックグラウンドジョブ

 バックグラウンドジョブは、フォアグラウンドジョブとは異なり、ユーザの入力を待たずに実行されるジョブです。コマンドの末尾に & を付けて実行することで、そのコマンドをバックグラウンドで実行します。例えば、sleep 10 & というコマンドを実行すると、その処理がバックグラウンドで実行され、その間に他のコマンドを入力することができます。

バックグラウンドジョブの実行例

 バックグラウンドジョブは、ユーザの入力を待たずに実行されるジョブです。以下は、バックグラウンドでジョブを実行する例です。

例1: sleep コマンドの実行

 この場合、sleep 10 コマンドがバックグラウンドで実行され、ジョブIDが表示されます。その後、プロンプトが返ってきて、ユーザは他のコマンドを実行できます。sleep 10 は10秒間何もせずに待機し、その後終了します。

$ sleep 10 &
[1] 12345

例2: ファイルのコピー

 この場合、大きなファイルを別のファイルにコピーする cp コマンドがバックグラウンドで実行されます。これにより、ファイルのコピーがバックグラウンドで行われ、プロンプトが返ってきて、他の作業を続けることができます。

 「[1]」はジョブが1番であることを示しています。右側の数値「1234」はプロセスIDです。プロセスIDは、システム全体で一意な数値ですが、ジョブIDは、端末ごとに割り当てられます。

$ cp largefile.txt newfile.txt &
[2] 12346

 バックグラウンドジョブは、フォアグラウンドジョブとは異なり、プロセスの終了を待たずに処理を継続するため、長時間の処理や同時に複数のタスクを実行する際に便利です。

バックグラウンドで実行する理由

  1. 非同期処理
     バックグラウンドジョブを使用すると、ユーザが他の作業を行いながら処理を実行できます。例えば、ファイルのダウンロードや長時間の処理などをバックグラウンドで実行することができます。
  2. リソースの効率的な利用
     バックグラウンドで実行されるジョブは、フォアグラウンドジョブと競合することなく、システムのリソースを効率的に利用することができます。特に、複数のジョブを同時に実行する場合に、バックグラウンドで実行することで処理を並行化できます。
  3. ログアウト時の処理の継続
     バックグラウンドジョブは、ユーザがログアウトした後も実行を継続します。これにより、長時間の処理を開始した後にログアウトしても、その処理が中断されることなく続行されます。

まとめ

 ジョブの管理は、Linuxシステムにおいて重要な概念です。フォアグラウンドジョブはユーザとの対話的な処理を行う際に使用され、バックグラウンドジョブは非同期処理やリソースの効率的な利用、ログアウト時の処理の継続などの目的で使用されます。これらのジョブの使い分けや管理は、システムのパフォーマンスやユーザの利便性に影響を与えるため、適切な取り扱いが必要です。