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

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux で様々なコマンドを使ってバックグラウンドジョブを管理する方法を学びます。バックグラウンドでプロセスを実行し、その状態を監視し、制御する方法を見つけます。この知識は、Linux 環境での効率的なマルチタスキングにとって重要で、端末を占拠することなく複数のタスクを同時に実行できるようにします。

達成目標

この実験が終了すると、以下のことができるようになります。

  • & 演算子を使ってバックグラウンドでコマンドを実行する
  • jobs コマンドを使ってバックグラウンドジョブを一覧表示して監視する
  • fg コマンドを使ってバックグラウンドジョブをフォアグラウンドに戻す
  • kill コマンドを使ってバックグラウンドジョブを停止する
  • バックグラウンドジョブの端末固有の性質を理解する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("Execution Delaying") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") linux/CompressionandArchivingGroup -.-> linux/tar("Archiving") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") subgraph Lab Skills linux/sleep -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/find -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/jobs -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/fg -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/kill -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/bg_process -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/tar -.-> lab-43{{"バックグラウンドジョブの管理"}} linux/ping -.-> lab-43{{"バックグラウンドジョブの管理"}} end

バックグラウンドでコマンドを実行する

まずは、バックグラウンドで簡単なコマンドを実行してみましょう。

  1. 端末を開きます。/home/labex/project ディレクトリにいる必要があります。そうでない場合は、次のコマンドを入力してこのディレクトリに移動できます。

    cd /home/labex/project
  2. 長時間実行されるプロセスをシミュレートするために sleep コマンドを使用します。次のコマンドを実行します。

    sleep 600 &

    sleep コマンドは指定された秒数(この場合は600秒または10分)だけ停止します。末尾の & は、Linux にこのコマンドをバックグラウンドで実行するように指示します。

  3. このコマンドを実行した後、次のような出力が表示されます。

    [1] 1234

    この出力には2つの重要な情報が含まれています。

    • [1] はジョブ番号です。これはこの特定のバックグラウンドジョブを参照するために使用されます。
    • 1234 はプロセスID(PID)です。これは実行中のプロセスの一意の識別子です。
  4. コマンドプロンプトがすぐに戻ることに気付きます。これは、プロセスがバックグラウンドで実行されているため、端末を続けて使用できるようになっているためです。

  5. 次に、バックグラウンドジョブの状態を確認しましょう。

    jobs

    このコマンドは現在のすべてのバックグラウンドジョブを一覧表示します。次のような出力が表示されるはずです。

    [1]+  Running                 sleep 600 &

    これは、ジョブ番号1が実行中であり、先ほど開始した sleep 600 コマンドであることを示しています。

  6. 重要なメモ:バックグラウンドジョブは、それが開始された端末セッションに固有です。新しい端末ウィンドウまたはタブを開いて jobs を実行しても、元の端末のバックグラウンドジョブは表示されません。これは、Linux でのバックグラウンドジョブの動作方法を理解する上での重要な概念です。

複数のバックグラウンドジョブを実行する

既に1つのバックグラウンドジョブを実行したので、今度は複数のジョブを同時に実行してみましょう。バックグラウンドジョブの多様性を示すために、さまざまなコマンドを組み合わせて使用します。

  1. さらにいくつかのバックグラウンドジョブを開始しましょう。次のコマンドを順に入力します。

    ping -c 100 google.com > ping_results.txt &
    find /home -name "*.log" > log_files.txt &
    sleep 1200 &

    これらのコマンドのそれぞれは新しいバックグラウンドジョブを開始します。それぞれに対してジョブ番号とPIDが表示されます。

  2. 次に、すべてのバックグラウンドジョブの状態を確認しましょう。

    jobs

    すべての4つのジョブ(ステップ1のものも含め)が一覧表示される出力が表示されるはずです。

    [1]   Running                 sleep 600 &
    [2]   Running                 ping -c 100 google.com > ping_results.txt &
    [3]-  Running                 find /home -name "*.log" > log_files.txt &
    [4]+  Running                 sleep 1200 &

    ジョブ4の横にある + は、これが最も最近開始されたバックグラウンドジョブであることを示しています。ジョブ3の横にある - は、ジョブ4が終了した場合、これが現在のジョブになることを示しています。

  3. 複数のバックグラウンドジョブを迅速に開始でき、他のコマンドに対して端末が応答し続けることに注目してください。

バックグラウンドジョブをフォアグラウンドに戻す

時々、バックグラウンドジョブをフォアグラウンドに戻して、それと対話したり、その出力を見たりしたい場合があります。これを行う方法を学びましょう。

  1. まず、現在のジョブを一覧表示します。

    jobs

    これにより、現在バックグラウンドで実行されているものの表示が更新されます。

  2. 長時間実行されるジョブの1つをフォアグラウンドに戻します。一覧からジョブ番号を選択します(たとえばジョブ番号3ですが、あなたの一覧に表示されているまだ実行中のジョブに対応する番号を使用してください)。それをフォアグラウンドに戻すには、fg コマンドの後にジョブ番号を付けて使用します。

    fg %3

    %3 はジョブ番号を指します。% 記号は、シェルに対して、あなたがプロセスIDではなくジョブ番号を指していることを示します。

  3. このコマンドを実行した後、コマンドがフォアグラウンドで実行されているのが見え、コマンドが完了するか、あなたが停止するまで、端末が「ブロック」されます。

  4. ジョブを停止して端末の制御を取り戻すには、Ctrl+C を押します。これは、現在のフォアグラウンドプロセスに割り込み信号を送信します。

  5. 再びジョブを確認しましょう。

    jobs

    フォアグラウンドに戻したジョブは、停止したためもはや一覧に表示されないはずです。

バックグラウンドジョブを停止する

次に、バックグラウンドジョブをフォアグラウンドに戻すことなく停止する方法を学びましょう。

  1. まず、現在のジョブを一覧表示します。

    jobs

    これにより、まだ実行中のジョブが表示されます。

  2. 残っているバックグラウンドジョブの1つを停止します。一覧からジョブ番号を選択します(たとえばジョブ番号2ですが、あなたの一覧に表示されているまだ実行中のジョブに対応する番号を使用してください)。それを停止するには、kill コマンドの後にジョブ番号を付けて使用します。

    kill %2

    %2 はあなたが選んだジョブ番号を指します。再び、% 記号は、私たちがジョブ番号を指していることを示しています。

  3. kill コマンドは指定されたジョブに終了信号を送信します。デフォルトでは、プロセスが円滑にシャットダウンできるような信号を送信します。

  4. 再びジョブを確認します。

    jobs

    あなたが停止したジョブがもはや一覧に表示されないはずです。これは、それが正常に終了したことを確認しています。

他のコマンドとの併用によるバックグラウンドジョブの使用

さまざまなコマンドを使って練習したので、今度は別の実用的なコマンドとバックグラウンドジョブを併用してみましょう。

  1. バックグラウンドでホームディレクトリの圧縮アーカイブを作成するために tar コマンドを使用します。

    tar -czf home_backup.tar.gz /home/labex &

    このコマンドは、ホームディレクトリの圧縮されたtarアーカイブを作成します。

  2. 以前のコマンドと同じように、ジョブ番号とPIDが表示されます。

  3. ジョブの状態を確認します。

    jobs

    tar コマンドが実行中のジョブとして一覧表示されるはずです。

  4. コマンドが実行されている間、他のタスクのために端末を続けて使用できます。これがバックグラウンドジョブの威力です!

  5. しばらくした後、コマンドが完了したかどうかを確認します。

    jobs

    もはや一覧に表示されなければ、完了しています。

  6. 次に、アーカイブが作成されたことを確認しましょう。

    ls -l home_backup.tar.gz

    これが正常に作成された場合、アーカイブファイルの詳細が表示されます。

まとめ

この実験では、Linuxにおけるバックグラウンドジョブの管理に必要な基本的なスキルを学びました。

  1. &演算子を使ってコマンドをバックグラウンドで実行する
  2. jobsコマンドを使ってバックグラウンドジョブを一覧表示し、監視する
  3. fgを使ってバックグラウンドジョブをフォアグラウンドに戻す
  4. killを使ってバックグラウンドジョブを停止する
  5. ネットワーク診断、ファイル検索、アーカイブ作成などの実際のシナリオにこれらの概念を適用する

また、重要な概念も学びました。バックグラウンドジョブは、それが開始された端末セッションに固有であるということです。これは、各端末ウィンドウまたはタブが独自のバックグラウンドジョブのセットを維持することを意味します。

これらのスキルは、Linux環境で効率的にマルチタスクを行うのに役立ち、複数のプロセスを同時に実行し、効果的に管理することができます。バックグラウンドジョブは、継続的な対話が必要ない長時間実行のタスクに特に役立ち、他の作業のために端末を解放します。