Linuxのpsコマンドでプロセスを一覧表示し、強制終了する方法

作業中にプログラムが突然フリーズしたり、動き続けているにもかかわらずCPUやメモリの消費が異常に高くなったりすることはありませんか。そんなとき、Linuxではps(Process Status)コマンドを使って問題に対処できます。この記事では、psコマンドを使って現在実行中のプロセスとそのPIDを一覧表示する方法を解説します。リソースを大量に消費している犯人のプロセスを見つけ出し、強制終了させましょう。
「ps」コマンドの基本
psコマンドは、オプションを付けずに単独で使用することもできます。その場合、次の4列の情報が出力されます。
- PID:システムによって割り当てられたプロセス固有の識別子。プロセスを停止させる際に使用する値です。
- TTY:そのプロセスが起動された端末(ターミナル)。
- TIME:プロセスが消費したCPU時間の合計。
- CMD:プロセスを生成したコマンド。

ただし、オプションなしで実行した場合は表示される情報がごく限られています。ここからは、psコマンドをより便利に活用するためのさまざまな方法を紹介していきます。
1. すべてのユーザーのプロセスを一覧表示する
一部のプログラムは、インストール時に専用のユーザーを追加作成し、そのユーザーでプロセスを実行することがあります。すべてのユーザーのプロセスを一覧表示するには、-eオプションを使用します。
ps -e
実行結果の出力例:
PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 kworker/0:0 4 ? 00:00:00 kworker/0:0H 5 ? 00:00:00 kworker/u256:0 6 ? 00:00:00 mm_percpu_wq
2. 詳細情報付きでプロセスを一覧表示する
実行中のプロセスを、より詳しい情報とともに表示することも可能です。その場合は-efオプションを使用します。
ps -ef
実行結果の出力例:
UID PID PPID C STIME TTY TIME CMD root 1 0 0 21:34 ? 00:00:03 /sbin/init maybe-ubiquity root 2 0 0 21:34 ? 00:00:00 [kthreadd] root 3 2 0 21:34 ? 00:00:00 [kworker/0:0] root 4 2 0 21:34 ? 00:00:00 [kworker/0:0H] root 6 2 0 21:34 ? 00:00:00 [mm_percpu_wq] root 7 2 0 21:34 ? 00:00:00 [ksoftirqd/0]
3. プロセスIDで絞り込む
表示したいプロセスのPIDがすでに分かっている場合は、-pフラグを使って特定のプロセスだけを抽出できます。複数のPIDを指定する場合は、スペースを入れずにカンマで区切ります。
ps -ef -p 1234,5678,9012
4. 特定ユーザーが所有するプロセスを一覧表示する
-uオプションにユーザー名を続けることで、特定のユーザーが所有するプロセスのみを一覧表示できます。
ps -u userName
実行結果の出力例:
PID TTY TIME CMD 2832 ? 00:00:00 systemd 2842 ? 00:00:00 (sd-pam) 3043 ? 00:00:00 sshd 3044 pts/1 00:00:00 bash 18396 pts/1 00:00:00 ps
5. アクティブなプロセスを一覧表示する
現在アクティブになっているすべてのプロセスを一覧表示するには、axオプションを使用します。
ps -ax
実行結果の出力例:
PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /sbin/init maybe-ubiquity 2 ? S 0:00 [kthreadd] 3 ? I 0:00 [kworker/0:0] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0]
6. ユーザー情報付きでアクティブなプロセスを一覧表示する
-auxフラグを追加すれば、どのユーザーが実行しているかという情報とともに、アクティブな全プロセスを一覧表示できます。
ps -aux
実行結果の出力例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 78132 9188 ? Ss 21:34 0:02 /sbin/init maybe-ubiquity root 2 0.0 0.0 0 0 ? S 21:34 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I 21:34 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? I< 21:34 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? I< 21:34 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 21:34 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 21:34 0:00 [migration/0]
7. プログラム名でプロセスを絞り込む
実行中の特定のプログラムに関する情報を取得したい場合は、psの結果にフィルターをかけることができます。
ps -aux | grep docker
実行結果の出力例:
root 1508 0.0 2.2 1518156 90868 ? Ssl 21:34 0:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock userkub+ 18429 0.0 0.0 13144 1108 pts/1 S+ 23:57 0:00 grep --color=auto docker
あるいは、-Cオプションを使って、名前を直接指定してプロセスを絞り込むことも可能です。
ps -C name

8. 表示する列を指定する
デフォルトの4列に加えて、任意の情報列を追加表示させることもできます。たとえば、次のように実行します。
ps -e -o pid,uname,pcpu,pmem,comm

-oフラグは、psコマンドの出力形式を細かくカスタマイズするためのオプションです。指定できる標準的な表示項目の一覧は、manページなどで確認できます。
9. 階層ツリー形式で結果を表示する
ps -e --forest
--forestオプションを使うと、ASCIIアートによるツリー構造でプロセスが表示され、フォークされた子プロセスが適切な親プロセスの子孫として整然と並びます。ツリーの「枝」部分を非表示にしたい場合は、--forestの代わりに-Hを使用してください。
10. プロセスのスレッドを表示する
ps -p 4041 -L

-Lフラグを付けると、psの各機能においてスレッド表示が有効になります。特に、特定のプロセスのスレッドを追跡したい場合に役立ちます。
11. root権限で実行されているすべてのプロセスを表示する
ps -f -U root -u root

このコマンドは、実UID・実効UIDの両方でrootとして実行されているすべてのプロセスを検索します。-fフラグのおかげで、完全な形式で詳細表示されます。-oフラグと組み合わせれば、出力内容をさらにカスタマイズすることもできます。
killコマンドでプロセスを停止する
問題を起こしているプロセスを特定できたら、killコマンドを使って実行中のプロセスを終了させましょう。killコマンドは、プロセスに対して終了を知らせるシグナルを送信します。プログラムがフリーズしている場合は、通常のシグナルでは応答しないため、多くの場合-9オプション(SIGKILL)で強制的に終了させる必要があります。
kill -9 PID

psの出力はあくまで瞬間的なスナップショットであり、htopのような監視ツールとは異なり、自動的には更新されません。そのため、どのプロセスが問題を起こしているのかを正確に把握するには、何度か実行し直す必要があるかもしれません。常に最新の状態を確認したい場合は、Linuxシステム向けの他のモニタリングコマンドも試してみてください。
-
Linuxでプロセスを強制終了する方法!top・ps・killコマンドの使い方を徹底解説
Linuxには、プロセスを強制終了(キル)するためのさまざまな方法があります。このチュートリアルでは、動作がおかしくなったプロセスを見つけて終了させる方法を解説します。 プロセスは簡単に「孤児」になってしまうことがあります。意図的であろうとなかろうと、親プロセスがクラッシュすると、子プロセスだけが取り残されて実行され続けることがあります。また、親プロセスが完了した子プロセスを回収(reap)できず、ゾンビプロセスになってしまうケースもあります。 どちらの状態のプロセスも放置されたままでは動けず、手動での介入が必要です。そこで登場するのがジョブコントロールです。それでは、壊れたプロセスを終了させ
-
Linuxのwatchコマンドの使い方と実用例をわかりやすく解説
Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行