Linuxのpsコマンドの使い方とは?実行中のプロセスを表示する方法についてまとめました。
- psコマンドの使い方
- 【使用例】「ps ax」もしくは「ps -ef」で実行中の全てのプロセスを表示
- 【使用例】「ps aux」で全てのユーザーの全てのプロセスを表示
- 【使用例】「ps aux | grep」で実行中の特定のプロセスを確認
- 【使用例】「ps axf」もしくは「pstree」コマンドでプロセスの親子関係をツリー状で表示
- 【使用例】「ps -p 」もしくは「ps p」で特定のプロセスIDの情報のみ表示
- 【使用例】「ps -l」もしくは「ps l」で親プロセスのPID、実行優先度(nice値)なども併せて表示
- 【使用例】「ps -ef」で完全なフォーマットで全てのプロセスを表示
- 【使用例】「ps u」でプロセスの実行ユーザ名も表示
- 【使用例】実行中のhttpdのプロセスを全て表示
- 関連記事
psコマンドの使い方
psコマンドは、実行中のプロセスを表示します。
ps [オプション] [プロセスID]
| オプション | 概要 |
|---|---|
| a | 全てのユーザーのプロセスを表示 |
| f | プロセスをツリー形式で表示 |
| r | 実行中のプロセス情報のみ表示 |
| u | 各プロセスの実行ユーザーやCPU、メモリ等の情報も表示 |
| x | 全制御端末のプロセスを表示(制御端末のないデーモンのようなプロセス情報も表示) |
| -e | 全てのプロセスを表示 |
| -f | 完全なフォーマットで表示 |
| -l | 標準の「PID、TTY、TIME、CMD」と「F、S、UID、PPID、C、PRI、NI、ADDR、SZ、VSZ、RSS、WCHAN、STAT」を表示 |
| -p PID | 特定のPIDのプロセス情報のみ表示 |
| -C プロセス名 | 指定した名前のプロセス情報のみ表示 |
| -w | 行を追加して表示(wを複数書くと、その数だけ行も増加) |
| o, -o | 出力形式を指定 |
実行結果に表示されるフィールドの概要は以下のとおり。
| フィールド | 概要 |
|---|---|
| F | プロセスの状態(16進数)。00:プロセスが終了状態、01:システム・プロセス(常にメモリー上に存在)の状態、 02:親プロセスからトレースされている状態、04:親プロセスからトレースされて停止状態、08:プロセスがシグナルで起動できない状態、10:プロセスがメモリー上にあるため、イベント終了までロックされている状態、20:プロセスがスワップできない状態 |
| UID | プロセスを実行しているユーザーID |
| PID | プロセスID |
| PPID | 現在のプロセスの親プロセスID |
| PRI | 優先度 |
| NI | ナイス値(優先順位) |
| VSZ | 仮想メモリの全サイズ |
| RSS | 使用中の物理メモリー量 |
| WCHAN | プロセスが休眠状態の時のカーネル関数名 |
| STAT/S | プロセスのステータス。R:実行可能、S:停止、D:割り込み不可の停止、T:停止またはトレース中、Z:ゾンビ・プロセス、W:スワップ・アウトしたプロセス、N:ナイス値が正 |
| TTY | 制御端末の種類および番号(どの端末から起動されたかを示す) |
| TIME | プロセスが開始した時刻 |
| COMMAND/CMD | プロセスのコマンド名 |
【使用例】「ps ax」もしくは「ps -ef」で実行中の全てのプロセスを表示
「ps ax」もしくは「ps -ef」で実行中の全てのプロセスを表示します。
$ ps ax
PID TT STAT TIME COMMAND
1 ?? Ss 14:25.92 /sbin/launchd
314 ?? Ss 3:21.36 /usr/libexec/logd
316 ?? Ss 0:08.14 /usr/libexec/UserEventAgent (System)
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 水01PM ?? 14:22.33 /sbin/launchd
0 314 1 0 水01PM ?? 3:20.53 /usr/libexec/logd
0 316 1 0 水01PM ?? 0:08.12 /usr/libexec/UserEventAgent (System)
0 318 1 0 水01PM ?? 0:01.31
【使用例】「ps aux」で全てのユーザーの全てのプロセスを表示
「ps aux」は、全てのユーザーの全てのプロセスを表示します。
a, u, xオプションの機能は以下のとおり
a: 全てのユーザーのプロセスを表示
u: 各プロセスの実行ユーザーやCPU、メモリ等の情報も表示
x: 全制御端末のプロセスを表示(制御端末のないデーモンのようなプロセス情報も表示)
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.2 166928 10068 ? Ss 22:32 0:02 /sbin/init splash root 2 0.0 0.0 0 0 ? S 22:32 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 22:32 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 22:32 0:00 [rcu_par_gp] root 5 0.0 0.0 0 0 ? I< 22:32 0:00 [slub_flushwq] root 6 0.0 0.0 0 0 ? I< 22:32 0:00 [netns] (略)
| 項目 | 内容 |
|---|---|
| USER | プロセスの所有ユーザー |
| PID | プロセス番号 |
| &CPU | CPU占有率 |
| &MEM | 実メモリ占有率 |
| SIZE | 仮想分も含めたメモリの使用量(KB) |
| RSS | 実メモリ上の使用量(KB) |
| TTY | 端末名 |
| STAT | プロセスの状態 |
| R | 稼動中 |
| S | 一時停止中 |
| D | 停止不可能で一時停止 |
| T | 終了処理中 |
| Z | ゾンビプロセス(実体が無いプロセス) |
| W | 実メモリ上に無く、スワップアウトしている |
| N | nice値 |
| START | プロセスの開始時刻 |
| TIME | プロセスの総実行時間 |
| COMMAND | 実行コマンド名とパス |
【使用例】「ps aux | grep」で実行中の特定のプロセスを確認
稼働中のプロセスの確認をする際によく使用されるのが「ps aux|grep プロセス名」というコマンドです。
検索したいプロセス名を入れて実行すると、そのプロセスが稼働しているかを確認できます。
【使用例】「ps axf」もしくは「pstree」コマンドでプロセスの親子関係をツリー状で表示
「ps axf」で実行中の全てのプロセスの親子関係をツリー状で表示します。
sv1@sv1:~$ ps axf
PID TTY STAT TIME COMMAND
2 ? S 0:01 [kthreadd]
3 ? I< 0:00 \_ [rcu_gp]
4 ? I< 0:00 \_ [rcu_par_gp]
5 ? I< 0:00 \_ [slub_flushwq]
6 ? I< 0:00 \_ [netns]
8 ? I< 0:01 \_ [kworker/0:0H-kblockd]
11 ? I< 0:00 \_ [mm_percpu_wq]
「pstree」コマンドでもプロセスの親子関係をツリー状で表示できます。ただし、表示形式は異なります。
sv1@sv1:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─apache2───8*[apache2]
├─at-spi-bus-laun─┬─dbus-daemon
【使用例】「ps -p 」もしくは「ps p」で特定のプロセスIDの情報のみ表示
プロセスIDが123のプロセスのみの情報を表示したい場合、以下のいずれかのコマンドを実行します。
$ ps -p 123 $ ps p 123
【使用例】「ps -l」もしくは「ps l」で親プロセスのPID、実行優先度(nice値)なども併せて表示
「ps -l」もしくは「ps l」で親プロセスのPID、実行優先度(nice値)なども併せて表示したい場合、以下のいずれかのコマンドを実行します。
$ ps -l UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD 501 55466 55465 34006 0 31 0 34420840 3416 - S 0 ttys001 0:00.06 -zsh
$ ps l UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND 501 55466 55465 0 31 0 34420840 3636 - S s001 0:00.06 -zsh
【使用例】「ps -ef」で完全なフォーマットで全てのプロセスを表示
「ps -ef」で完全なフォーマットで全てのプロセスを表示します。
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 水01PM ?? 28:33.56 /sbin/launchd
0 314 1 0 水01PM ?? 6:48.66 /usr/libexec/logd
0 316 1 0 水01PM ?? 0:15.75 /usr/libexec/UserEventAgent (System)
【使用例】「ps u」でプロセスの実行ユーザ名も表示
「ps u」でプロセスの実行ユーザ名も表示します。
$ ps u USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND user01 55466 0.0 0.0 34429032 3588 s001 S 1:45PM 0:00.07 -z
【使用例】実行中のhttpdのプロセスを全て表示
現在実行中のhttpdのプロセスを全て表示するには、以下のいずれかのコマンドを使います。
$ ps ax | grep httpd | grep -v grep
単に「ps ax | grep httpd」を実行すると、検索のために実行したコマンドまで検索対象に含まれるため、抽出結果が1つ多くなります。
そのため、さらにパイプで「grep -v grep」を通すことで、grepを含むもの(検索のために実行したコマンド)を除外します。

$ pgrep httpd
pgrepコマンドは、実行中のプロセスから特定の名前を持つプロセスIDを検索できます(検索対象から自身は除外)。

関連記事



コメント