ps、kill、およびkillallコマンドを使用して、プロセスを終了し、システムリソースを再利用する方法を学習します 。 |
Linux 、すべてのプログラムおよびデーモンは、「プロセス」です。ほとんどのプロセスは実行中のプログラムを表します。他のプログラムは他のプロセスを派生させることができます。たとえば、特定のイベントをリッスンしてからそれらに応答します。また、各プロセスには一定量のメモリと処理能力が必要です。実行するプロセスが多いほど、必要なメモリとCPUサイクルも多くなります。古いコンピューター(たとえば、私が7年間使用したラップトップ)または軽量コンピューター(たとえば、Raspberry Pi)では、バックグラウンドで実行されているプロセスに注意を払えば、システムを最大限に活用できます。
psコマンドを使用して 、実行中のプロセスを表示できます。通常、psコマンドのパラメーターを使用して、より多くの出力情報を表示します。-eパラメーターを使用して実行中の各プロセスを表示し、-fパラメーターを使用して各プロセスの完全な詳細を取得するのが好きです。ここではいくつかの例を示します。
$ ps PID TTY TIME CMD 88000 pts / 0 00:00:00 bash 88052 pts / 0 00:00:00 ps 88053 pts / 00:00:00ヘッド
$ ps -e | ヘッド PIDTTY TIME CMD 1?00:00:50 systemd 2?00:00:00 kthreadd 3?00:00:00 rcu_gp 4?00:00:00 rcu_par_gp 6?00:00:02 kworker / 0:0H-events_highpri 9?00:00:00 mm_percpu_wq 10?00:00:01 ksoftirqd / 0 11?00:00:12 rcu_sched 12?00:00:00移行/ 0
$ ps -ef | ヘッド UIDPID PPID C STIME TTY TIMECMD ルート10 0 13:51?00:00:50 / usr / lib / systemd / systemd --switched-root --system --deserialize 36 root 2 0 0 13:51?00:00:00 [kthreadd] ルート32 0 13:51?00:00:00 [rcu_gp] ルート42 0 13:51?00:00:00 [rcu_par_gp] ルート62 0 13:51?00:00:02 [kworker / 0:0H-kblockd] ルート9 2 0 13:51?00:00:00 [mm_percpu_wq] ルート102 0 13:51?00:00:01 [ksoftirqd / 0] ルート112 0 13:51?00:00:12 [rcu_sched] ルート122 0 13:51?00:00:00 [移行/ 0]
最後の例は、最も詳細を示しています。各行で、UID(ユーザーID)はプロセスの所有者を示します。PID(プロセスID)は各プロセスのデジタルIDを表し、PPID(親プロセスID)はその親プロセスのデジタルIDを表します。どのUnixシステムでも、プロセスには1から始まる番号が付けられ、カーネルが開始された後に実行される最初のプロセスです。ここで、systemdはkthreaddを生み出した最初のプロセスであり、kthreaddはrcu_gpやrcu_par_gpなどの一連のプロセスを含む他のプロセスも作成しました。
killコマンドを使用してプロセスを管理します
システムはほとんどのバックグラウンドプロセスを処理するため、これらのプロセスについて心配する必要はありません。実行しているアプリケーションによって作成されたプロセスにのみ注意を払う必要があります。多くのアプリケーション(音楽プレーヤー、ターミナルエミュレータ、ゲームなど)は一度に1つのプロセスしか実行しませんが、他のアプリケーションはバックグラウンドプロセスを作成する場合があります。これらのアプリケーションの一部は、ログアウト後もバックグラウンドで実行される可能性があるため、次に使用するときにすぐに起動できます。
Chromiumを(Google Chromeのベースとなるオープンソースプロジェクトとして)実行すると、プロセス管理が問題になります。Chromiumは私のラップトップで非常にハードに動作し、多くの追加プロセスを生成します。今、私はこれらのクロムプロセスを見るために5つのタブを開くだけです:
$ ps -ef | fgrepはクロム jhall 66221 [...]は/ usr / lib64に/クロム-ブラウザ/クロムブラウザ[...] jhall 66230 [...]は/ usr / lib64に/クロム-ブラウザ/クロムブラウザ[...] [...] jhall 66861 [...] / usr / lib64 / chromium-browser / chromium-browser [...] jhall 67329 65132 0 15:45 pts / 0 00:00:00 grep-Fクロム
いくつかの行を省略しました。その中には、20個のChromiumプロセスと、「chromium」文字を検索するgrepプロセスがあります。
$ ps -ef | fgrepクロム| wc -l 21
しかし、Chromiumを終了した後も、これらのプロセスはまだ実行されています。それらを閉じて、これらのプロセスによって占有されているメモリとCPUを再利用するにはどうすればよいですか?
killコマンドを使用すると、プロセスを終了できます。最も単純なケースでは、終了するプロセスのPIDを終了するようにkillコマンドに指示します。たとえば、これらのプロセスを終了するには、20個のChromiumプロセスIDすべてに対してkillコマンドを実行する必要があります。1つの方法は、コマンドラインを使用してChromiumのPIDを取得することであり、もう1つの方法は、リストに対してkillを実行することです。
$ ps -ef | fgrep / usr / lib64 / chromium-browser / chromium-browser | awk '{print $ 2}' 66221 66230 66239 66257 66262 66283 66284 66285 66324 66337 66360 66370 66386 66402 66503 66539 66595 66734 66848 66861 69702 $ ps -ef | fgrep / usr / lib64 / chromium-browser / chromium-browser | awk '{print $ 2}'> / tmp / pids $ kill $(cat / tmp / pids)
最後の2行が重要です。最初のコマンドラインは、ChromiumブラウザのプロセスIDのリストを生成します。2番目のコマンドラインは、プロセスIDのリストに対してkillコマンドを実行します。
killallコマンドの紹介
複数のプロセスを一度に強制終了する簡単な方法は、killallコマンドを使用することです。名前から推測すると、killallは名前に一致するすべてのプロセスを終了します。これは、このコマンドを使用して、すべての不正なChromiumプロセスを停止できることを意味します。これは非常に簡単です。
$ killall / usr / lib64 / chromium-browser / chromium-browser
ただし、killallは注意して使用してください。このコマンドは、指定した名前に一致するすべてのプロセスを終了できます。そのため、ps -efコマンドを使用して実行中のプロセスを確認し、停止するコマンドの正確なパスに対してkillallを実行するのが好きです。
-iまたは--interactiveパラメーターを使用して、各プロセスを停止する前にkillkillにプロンプトを表示させることもできます。
killallは、-oまたは--older-thanパラメーターを使用して、特定の時間より古いプロセスを検索することもサポートしています。たとえば、数日間実行されている悪意のあるプロセスのセットを見つけた場合、それは役に立ちます。または、最近開始した暴走プロセスなど、特定の時間よりも遅いプロセスを探すこともできます。これらのプロセスを見つけるには、-yまたは--young-thanパラメーターを使用します。
プロセスを管理する他の方法
プロセス管理は、システムメンテナンスの重要な部分です。UnixおよびLinuxシステム管理者としての私の初期のキャリアでは、違法なジョブを強制終了する機能が、システムを稼働させ続けるための鍵でした。現在、Linuxで不正なプロセスを手動で終了する必要はないかもしれませんが、問題が発生した場合は、killとkillallが役立つことを知っています。
プロセスを管理する他の方法もあります。私の場合、ブラウザを終了した後、バックグラウンドのChromiumプロセスを終了するためにkillまたはkillallを使用する必要はありませんでした。Chromiumには、制御可能な簡単な設定があります。
ただし、システムで実行されているプロセスに常に注意を払い、必要に応じて介入することをお勧めします。