はじめに
この実験では、Linux で様々なコマンドを使ってバックグラウンドジョブを管理する方法を学びます。バックグラウンドでプロセスを実行し、その状態を監視し、制御する方法を見つけます。この知識は、Linux 環境での効率的なマルチタスキングにとって重要で、端末を占拠することなく複数のタスクを同時に実行できるようにします。
達成目標
この実験が終了すると、以下のことができるようになります。
&演算子を使ってバックグラウンドでコマンドを実行するjobsコマンドを使ってバックグラウンドジョブを一覧表示して監視するfgコマンドを使ってバックグラウンドジョブをフォアグラウンドに戻すkillコマンドを使ってバックグラウンドジョブを停止する- バックグラウンドジョブの端末固有の性質を理解する
バックグラウンドでコマンドを実行する
まずは、バックグラウンドで簡単なコマンドを実行してみましょう。
端末を開きます。
/home/labex/projectディレクトリにいる必要があります。そうでない場合は、次のコマンドを入力してこのディレクトリに移動できます。cd /home/labex/project長時間実行されるプロセスをシミュレートするために
sleepコマンドを使用します。次のコマンドを実行します。sleep 600 &sleepコマンドは指定された秒数(この場合は 600 秒または 10 分)だけ停止します。末尾の&は、Linux にこのコマンドをバックグラウンドで実行するように指示します。このコマンドを実行した後、次のような出力が表示されます。
[1] 1234この出力には 2 つの重要な情報が含まれています。
[1]はジョブ番号です。これはこの特定のバックグラウンドジョブを参照するために使用されます。1234はプロセス ID(PID)です。これは実行中のプロセスの一意の識別子です。
コマンドプロンプトがすぐに戻ることに気付きます。これは、プロセスがバックグラウンドで実行されているため、端末を続けて使用できるようになっているためです。
次に、バックグラウンドジョブの状態を確認しましょう。
jobsこのコマンドは現在のすべてのバックグラウンドジョブを一覧表示します。次のような出力が表示されるはずです。
[1]+ Running sleep 600 &これは、ジョブ番号 1 が実行中であり、先ほど開始した
sleep 600コマンドであることを示しています。重要なメモ:バックグラウンドジョブは、それが開始された端末セッションに固有です。新しい端末ウィンドウまたはタブを開いて
jobsを実行しても、元の端末のバックグラウンドジョブは表示されません。これは、Linux でのバックグラウンドジョブの動作方法を理解する上での重要な概念です。
複数のバックグラウンドジョブの実行
既に 1 つのバックグラウンドジョブを実行したので、今度は複数のジョブを同時に実行してみましょう。バックグラウンドジョブの多様性を示すために、さまざまなコマンドを組み合わせて使用します。
さらにいくつかのバックグラウンドジョブを開始しましょう。次のコマンドを順に入力します。
ping -c 100 google.com > ping_results.txt & find /home -name "*.log" > log_files.txt & sleep 1200 &これらのコマンドのそれぞれは新しいバックグラウンドジョブを開始します。それぞれに対してジョブ番号と PID が表示されます。
次に、すべてのバックグラウンドジョブの状態を確認しましょう。
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 が終了した場合、これが現在のジョブになることを示しています。複数のバックグラウンドジョブを迅速に開始でき、他のコマンドに対して端末が応答し続けることに注目してください。
バックグラウンドジョブをフォアグラウンドに戻す
時々、バックグラウンドジョブをフォアグラウンドに戻して、それと対話したり、その出力を見たりしたい場合があります。これを行う方法を学びましょう。
まず、現在のジョブを一覧表示します。
jobsこれにより、現在バックグラウンドで実行されているものの表示が更新されます。
長時間実行されるジョブの 1 つをフォアグラウンドに戻します。一覧からジョブ番号を選択します(たとえばジョブ番号 3 ですが、あなたの一覧に表示されているまだ実行中のジョブに対応する番号を使用してください)。それをフォアグラウンドに戻すには、
fgコマンドの後にジョブ番号を付けて使用します。fg %3%3はジョブ番号を指します。%記号は、シェルに対して、あなたがプロセス ID ではなくジョブ番号を指していることを示します。このコマンドを実行した後、コマンドがフォアグラウンドで実行されているのが見え、コマンドが完了するか、あなたが停止するまで、端末が「ブロック」されます。
ジョブを停止して端末の制御を取り戻すには、
Ctrl+Cを押します。これは、現在のフォアグラウンドプロセスに割り込み信号を送信します。再びジョブを確認しましょう。
jobsフォアグラウンドに戻したジョブは、停止したためもはや一覧に表示されないはずです。
バックグラウンドジョブの停止
次に、バックグラウンドジョブをフォアグラウンドに戻すことなく停止する方法を学びましょう。
まず、現在のジョブを一覧表示します。
jobsこれにより、まだ実行中のジョブが表示されます。
残っているバックグラウンドジョブの 1 つを停止します。一覧からジョブ番号を選択します(たとえばジョブ番号 2 ですが、あなたの一覧に表示されているまだ実行中のジョブに対応する番号を使用してください)。それを停止するには、
killコマンドの後にジョブ番号を付けて使用します。kill %2%2はあなたが選んだジョブ番号を指します。再び、%記号は、私たちがジョブ番号を指していることを示しています。killコマンドは指定されたジョブに終了信号を送信します。デフォルトでは、プロセスが円滑にシャットダウンできるような信号を送信します。再びジョブを確認します。
jobsあなたが停止したジョブがもはや一覧に表示されないはずです。これは、それが正常に終了したことを確認しています。
他のコマンドとの併用によるバックグラウンドジョブの使用
さまざまなコマンドを使って練習したので、今度は別の実用的なコマンドとバックグラウンドジョブを併用してみましょう。
バックグラウンドでホームディレクトリの圧縮アーカイブを作成するために
tarコマンドを使用します。tar -czf home_backup.tar.gz /home/labex &このコマンドは、ホームディレクトリの圧縮された tar アーカイブを作成します。
以前のコマンドと同じように、ジョブ番号と PID が表示されます。
ジョブの状態を確認します。
jobstarコマンドが実行中のジョブとして一覧表示されるはずです。コマンドが実行されている間、他のタスクのために端末を続けて使用できます。これがバックグラウンドジョブの威力です!
しばらくした後、コマンドが完了したかどうかを確認します。
jobsもはや一覧に表示されなければ、完了しています。
次に、アーカイブが作成されたことを確認しましょう。
ls -l home_backup.tar.gzこれが正常に作成された場合、アーカイブファイルの詳細が表示されます。
まとめ
この実験では、Linux におけるバックグラウンドジョブの管理に必要な基本的なスキルを学びました。
&演算子を使ってコマンドをバックグラウンドで実行するjobsコマンドを使ってバックグラウンドジョブを一覧表示し、監視するfgを使ってバックグラウンドジョブをフォアグラウンドに戻すkillを使ってバックグラウンドジョブを停止する- ネットワーク診断、ファイル検索、アーカイブ作成などの実際のシナリオにこれらの概念を適用する
また、重要な概念も学びました。バックグラウンドジョブは、それが開始された端末セッションに固有であるということです。これは、各端末ウィンドウまたはタブが独自のバックグラウンドジョブのセットを維持することを意味します。
これらのスキルは、Linux 環境で効率的にマルチタスクを行うのに役立ち、複数のプロセスを同時に実行し、効果的に管理することができます。バックグラウンドジョブは、継続的な対話が必要ない長時間実行のタスクに特に役立ち、他の作業のために端末を解放します。



