Linux でのプロセスの終了

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

はじめに

この実験(Lab)では、Linux で killkillall、および pkill コマンドを使用してプロセスを終了する方法を学びます。これらのコマンドは、実行中のプロセスを管理するために不可欠であり、応答のないアプリケーションを停止したり、システムリソースを解放したりするために使用できます。

この実験の終わりには、次のことができるようになります。

  • kill コマンドを使用して、特定のプロセスを終了する
  • killall コマンドを使用して、名前で複数のプロセスを終了する
  • pkill コマンドを killall の代替として使用する

プロセス ID とシグナルの理解

プロセスを終了する前に、2 つの重要な概念、プロセス ID(PID)とシグナルを理解することが重要です。

  1. Ubuntu VM でターミナルを開きます。デフォルトでは /home/labex/project ディレクトリにいるはずです。確認できない場合は、pwd と入力して Enter キーを押すことで、現在のディレクトリを確認できます。

  2. まず、簡単なバックグラウンドプロセスを実行してみましょう。次のコマンドを入力します。

    sleep 1000 &
    

    このコマンドは、1000 秒間スリープするプロセスを開始し、バックグラウンドで実行します。末尾の & は、シェルにコマンドをバックグラウンドで実行するように指示し、ターミナルを引き続き使用できるようにします。

  3. 実行中のプロセスを表示するには、ps コマンドを使用します。

    ps aux | grep sleep
    

    このコマンドは、すべての実行中のプロセス (ps aux) を表示し、次に "sleep" を含む行のみを表示するように出力をフィルタリングします (grep sleep)。

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

    Terminal showing sleep process

    2 番目の列の数字はプロセス ID(PID)です。これは、後でプロセスを終了するために使用します。

  4. Linux は、シグナルを使用してプロセスと通信します。プロセスを終了するための最も一般的なシグナルは次のとおりです。

    • SIGTERM (15): プロセスを正常に終了します。これは、kill コマンドによって送信されるデフォルトのシグナルです。
    • SIGKILL (9): プロセスを強制的に終了します。これは、SIGTERM が機能しない場合に最後の手段として使用する必要があります。

PID とシグナルを理解したので、kill コマンドの使用に進む準備ができました。

kill コマンドの使用

kill コマンドは、PID で識別される特定のプロセスにシグナルを送信するために使用されます。デフォルトでは、SIGTERM シグナルを送信し、プロセスに正常終了を要求します。

  1. 先ほど開始した sleep プロセスを終了してみましょう。まず、ps コマンドを使用してその PID を見つけます。

    ps aux | grep sleep
    

    sleep プロセスの PID を書き留めてください。これは、出力の 2 番目の列にある数字です。

  2. 次に、kill コマンドを使用してプロセスを終了します。

    kill <PID>
    

    <PID> を、書き留めた実際のプロセス ID に置き換えます。たとえば、PID が 1234 の場合、kill 1234 と入力します。

  3. プロセスがまだ実行されているかどうかを確認します。

    ps aux | grep sleep
    

    grep コマンド自体を除き、出力に sleep プロセスが表示されなくなるはずです。

プロセスがまだ実行されている場合(単純な sleep コマンドでは可能性は低いですが、より複雑なアプリケーションでは可能です)、より強力なシグナルを使用できます。

kill -9 <PID>

Terminating process with kill command

これにより、SIGKILL シグナルが送信され、プロセスが強制的に終了します。SIGKILL は、プロセスがクリーンアップすることを許可しないため、より複雑なアプリケーションではデータの損失やその他の問題につながる可能性があるため、注意して使用してください。

killall コマンドの使用

killall コマンドを使用すると、名前でプロセスを終了できます。これは、同じプログラムの複数のインスタンスが実行されている場合に、PID を使用するよりも便利です。

  1. 複数の sleep プロセスを開始します。

    sleep 2000 &
    sleep 2000 &
    sleep 2000 &
    

    このコマンドは、それぞれバックグラウンドで 2000 秒間実行される 3 つの個別の sleep プロセスを開始します。

  2. プロセスが実行されていることを確認します。

    ps aux | grep sleep
    

    3 つの sleep プロセスがリストされているはずです。

  3. 次に、killall コマンドを使用して、すべての sleep プロセスを終了します。

    sudo killall sleep
    

    ここでは sudo を使用します。これは、killall が他のユーザーまたはシステムプロセスによって開始されたプロセスを終了するために、昇格された権限を必要とする可能性があるためです。パスワードの入力を求められる場合があります。

  4. プロセスが終了したことを確認します。

    ps aux | grep sleep
    

    grep コマンド自体を除き、出力に sleep プロセスが表示されなくなるはずです。

「Operation not permitted(操作は許可されていません)」エラーが表示された場合、特定のプロセスを終了するための必要な権限がないことを意味します。この場合、上記のように sudo を使用すると、問題が解決するはずです。

pkill コマンドの使用

pkill コマンドは、killall と同様に、名前でプロセスを終了する別の方法です。これは、部分的な名前の一致に基づいてプロセスを終了する場合に特に役立ちます。

  1. さらにいくつかの sleep プロセスを開始します。

    sleep 3000 &
    sleep 3000 &
    sleep 3000 &
    

    これにより、さらに 3 つの sleep プロセスが開始され、それぞれバックグラウンドで 3000 秒間実行されます。

  2. pkill コマンドを使用して、これらのプロセスを終了します。

    sudo pkill sleep
    

    killall と同様に、すべての一致するプロセスを終了するために必要な権限があることを確認するために sudo を使用します。

  3. プロセスが終了したことを確認します。

    ps aux | grep sleep
    

    grep コマンド自体を除き、出力に sleep プロセスが表示されないはずです。

pkillkillall の主な違いは、pkill が部分的なプロセス名に一致できることです。たとえば、pkill firefirefoxfirebird の両方のプロセスを終了します。これは強力であると同時に危険でもあるため、pkill コマンドを実行する前に必ず再確認してください。

実際のアプリケーションでの練習

killkillall、および pkill の使用方法を学習したので、実際のアプリケーションで練習してみましょう。例として Firefox を使用します。この手順はデスクトップ環境で練習する必要があります。

Firefox process termination example

  1. Firefox Web ブラウザを起動します。

    firefox &
    

    このコマンドは、Firefox をバックグラウンドで起動します。デスクトップに Firefox ウィンドウが開いているはずです。

  2. ps コマンドを使用して、Firefox の PID を見つけます。

    ps aux | grep firefox
    

    メインの Firefox プロセスの PID を書き留めてください。通常、最初にリストされる Firefox プロセスです。

  3. kill コマンドを使用して、Firefox を終了します。

    kill <PID>
    

    <PID> を、書き留めた Firefox の実際のプロセス ID に置き換えます。

  4. Firefox が閉じない場合(一部のアプリケーションが SIGTERM シグナルをキャッチするため、可能です)、SIGKILL シグナルを使用してみてください。

    kill -9 <PID>
    

    SIGKILL は、アプリケーションが状態を保存したり、適切にクリーンアップしたりできないため、最後の手段として使用する必要があることを覚えておいてください。

  5. または、killall または pkill を使用することもできます。

    sudo killall firefox
    

    または

    sudo pkill firefox
    

    これらのコマンドは、すべての Firefox プロセスを一度に終了します。これは、プロセスを 1 つずつ終了するよりも便利です。

アプリケーションを強制的に終了すると、データの損失につながる可能性があるため、可能な限りアプリケーションを通常の方法で閉じる方が常に優れています。これらのコマンドは、アプリケーションが応答しない場合、またはシステムリソースをすばやく解放する必要がある場合に使用する必要があります。

まとめ

おめでとうございます!Linux でのプロセスの終了に関するこの実験を正常に完了しました。以下の方法を学習しました。

  1. kill コマンドを使用して、PID で特定のプロセスを終了する
  2. killall コマンドを使用して、名前で複数のプロセスを終了する
  3. pkill コマンドを killall の代替として使用する
  4. これらのコマンドを、単純なバックグラウンドプロセスと実際のアプリケーションの両方に適用する

これらのコマンドはプロセスを管理するための強力なツールですが、慎重に使用してください。重要なシステムプロセスを終了すると、システムの不安定さにつながる可能性があります。これらのコマンドを使用する前に、常に終了するプロセスを確認してください。

Linux の学習を続ける中で、これらのプロセス管理スキルは、スムーズに動作するシステムを維持し、問題をトラブルシューティングするために非常に役立つことがわかるでしょう。これらのコマンドを練習し続けて、Linux でのプロセス管理に慣れてください!