InfraAcademy

InfraAcademy Blog

【Linux】プロセスを確認するpsコマンドの使い方解説!オプションなども併せて解説

こんにちは、インフラエンジニアのryuです。

Linuxサーバーで、Webサーバーが起動しているか確認したい。 CPUやメモリを多く使っている処理を探したい。

そんなときに使うのが、psコマンドです。

よく使われるのはps auxですが、どこを見ればよいのか迷いますよね?

この記事では、ps auxps -efの違い、表示項目の見方、特定のプロセスを探す方法まで解説します。

psコマンドとは?

psは、実行した時点のプロセス情報を表示するコマンドです。

プロセスとは、Linux上で実行されているプログラムの処理単位です。

Nginx、SSH、データベースもプロセスとして管理されます。

各プロセスにはPIDが割り当てられます。

オプションを付けずに実行してみましょう。

ps

通常は、現在の端末で実行しているプロセスだけが表示されます。

    PID TTY          TIME CMD
   3120 pts/0    00:00:00 bash
   3251 pts/0    00:00:00 ps

サーバー全体のプロセスを確認したい場合は、ps auxps -efを使います。

ps auxでプロセスを一覧表示する

Linuxのプロセスを広く確認するときは、次のコマンドがよく使われます。

ps aux

auxは、ハイフンを付けないBSD形式のオプションです。

オプション 内容
a ほかのユーザーのプロセスも表示する
u ユーザー名やCPU・メモリ情報を表示する
x 端末に接続されていないプロセスも表示する

組み合わせると、バックグラウンドのサービスも確認できます。

ps -auxと書かれた手順を見かけることもありますが、通常はハイフンを付けずにps auxと入力します。

ps auxの表示項目を見る

ps auxを実行すると、次のような情報が表示されます。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 169588 13200 ?        Ss   09:00   0:02 /sbin/init
www-data  1250  1.2  3.4 820000 72000 ?        S    10:10   0:18 nginx

主な項目は以下の通りです。

項目 意味
USER プロセスを実行しているユーザー
PID プロセスの識別番号
%CPU CPU使用率
%MEM 物理メモリに対する使用割合
VSZ 仮想メモリ空間のサイズ
RSS 使用している物理メモリの目安
TTY 接続している端末
STAT プロセスの状態
START プロセスを開始した時刻
TIME 使用したCPU時間の合計
COMMAND 実行コマンドと引数

障害調査では、PID、%CPU%MEM、STAT、COMMANDを見ます。変化を継続して見たい場合はtopを使います。

VSZとRSSの違い

VSZとRSSは、どちらもメモリに関係する項目です。

VSZはプロセスが利用できる仮想アドレス空間を含むため、数字が大きくても同じ量の物理メモリを使っているとは限りません。

RSSは、プロセスが物理メモリ上で使用している量の目安です。

メモリを使っているプロセスを探す場合は、まず%MEMやRSSを確認します。

サーバー全体はfree -hも確認してください。

【関連記事】Linuxのメモリ使用率を確認する方法

STATでプロセスの状態を確認する

STATには、プロセスの現在の状態が記号で表示されます。

主な状態は以下の通りです。

記号 状態
R 実行中、または実行可能な状態
S 割り込み可能な待機状態
D 割り込みできない待機状態
T 停止中
Z ゾンビ状態

Dが長く続く場合は、ディスクやネットワークストレージなどの入出力待ちを確認します。

Zは、終了した子プロセスの情報を親プロセスが回収できていない状態です。

ゾンビプロセス自身へkillを実行しても解消できないため、親プロセスの状態やアプリケーションの処理を確認します。

ps auxとps -efの違い

プロセス一覧を表示する方法として、ps -efもよく使われます。

ps -ef

ps auxps -efは、どちらも広い範囲のプロセスを表示します。

主な違いは、オプション形式と初期表示される項目です。

比較 ps aux ps -ef
形式 BSD形式 UNIX形式
CPU・メモリ使用率 表示される 通常は表示されない
PPID 通常は表示されない 表示される
向いている確認 負荷や使用量 親子関係や起動コマンド

ps -efの例は以下です。

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 09:00 ?        00:00:02 /sbin/init
root         720       1  0 09:01 ?        00:00:00 /usr/sbin/sshd -D

PPIDは、親プロセスのPIDです。

ps auxは負荷、ps -efは親子関係の確認に向いています。

特定のプロセスを確認する

プロセス一覧は長いため、実務では目的のプロセスだけに絞ります。

Nginxを探す場合は、次のように実行します。

ps aux | grep nginx

ただし、検索に使ったgrep nginx自身も表示されることがあります。

次のように書くと、grep自身の行を避けられます。

ps aux | grep '[n]ginx'

プロセス名で探す場合は、pgrepも使えます。

pgrep -a nginx

-aを付けると、PIDとコマンドラインが表示されます。

特定ユーザーが実行しているプロセスを探す場合は、以下の通りです。

ps -u www-data

PIDが分かっている場合は、対象だけを表示できます。

ps -p 1250 -f

表示する項目を指定する

-oを使うと、必要な項目だけを選んで表示できます。

ps -eo pid,ppid,user,stat,%cpu,%mem,etime,comm

この例では、PID、PPID、ユーザー、状態、CPU・メモリ使用率、経過時間、コマンド名を表示します。

指定項目 内容
pid PID
ppid 親プロセスのPID
user 実行ユーザー
stat 状態
%cpu CPU使用率
%mem メモリ使用率
etime 起動後の経過時間
comm 実行ファイル名

CPU・メモリ使用量で並べ替える

CPU使用率が高い順に表示する場合は、以下のように実行します。

ps aux --sort=-%cpu | head

メモリ使用率が高い順は、次の通りです。

ps aux --sort=-%mem | head

RSSが大きい順に並べることもできます。

ps -eo pid,user,%mem,rss,comm --sort=-rss | head

先頭の行だけで原因と判断しないでください。

バックアップや集計処理などで、一時的にCPUやメモリを使用している可能性もあります。

発生時刻、処理内容、ログ、数値の変化を合わせて確認します。

プロセスの親子関係を確認する

プロセスの親子関係を見たい場合は、ツリー形式が便利です。

ps -ef --forest

BSD形式では、次のように表示できます。

ps auxf

pstreeが入っている環境では、より見やすく確認できます。

pstree -p

親プロセスから子プロセスが枝分かれして表示され、Webサーバーの親子関係などを確認できます。

psとtopの違い

pstopは、どちらもプロセスを確認するコマンドです。

違いは、情報の更新方法です。

コマンド 特徴
ps 実行時点の一覧を表示する
top 数秒ごとに更新して変化を表示する

psは記録、変化を見たい場合はtopが便利です。

top

障害調査では、topで変化を見ながら、必要なプロセスをpsで詳しく表示することがあります。

プロセスを終了するときの注意点

対象のPIDが分かったら、killコマンドでシグナルを送れます。

kill 1250

シグナルを省略した場合は、通常SIGTERMが送られます。

SIGTERMは、プロセスに終了処理を行う機会を与える終了要求です。

すぐにkill -9を使うのはおすすめしません。

kill -9 1250

SIGKILLではプロセスが終了処理を行えず、書き込み途中のデータや一時ファイルが残る可能性があります。

まずサービスの管理方法を確認し、systemdのサービスなら次のように停止します。

sudo systemctl stop nginx

通常の方法で終了できない場合に強制終了を検討します。

【関連記事】Linuxのkillコマンドの使い方

psコマンドを使った障害調査の例

例えば、Webサーバーの応答が遅い場合を考えてみましょう。

最初に、CPU使用率の高いプロセスを確認します。

ps aux --sort=-%cpu | head

次に、対象プロセスのPID、経過時間、起動コマンドを表示します。

ps -p 1250 -o pid,ppid,user,stat,%cpu,%mem,etime,args

必要に応じて、サービス状態やログも確認します。

systemctl status nginx
sudo journalctl -u nginx --since "30 minutes ago"

psだけで断定せず、ログや監視データと組み合わせます。

私はエンジニアとして10年以上サーバーを見てきましたが、負荷の高いプロセスをすぐ終了することはありません。

何の処理なのか、いつから増えたのか、終了した場合にどのサービスへ影響するのかを確認してから判断します。

psコマンドの使い方まとめ

サーバー全体のプロセスを確認する場合は、次のコマンドを使います。

ps aux

親子関係を確認したい場合は、ps -ef--forestが便利です。

ps -ef --forest

CPUやメモリの使用量で並べ替える場合は、以下のように実行します。

ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head

psは、実行時点のプロセスを確認するコマンドです。

PID、状態、使用量、起動コマンドを確認し、ログやサービス状態と合わせて判断しましょう。

Linuxのプロセス管理を学びたい方へ

InfraAcademyでは、ブラウザ上のLinux環境でプロセスを起動し、psやkillを実行しながら学習できます。

Linuxの基本操作から始めたい方は、Linux入門講座を確認してみてください。

プロセス、サービス、ログ管理まで学びたい方は、Linux中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る