Linuxコマンド辞典 psコマンド(プロセス管理)
プロセス状況を表示する「ps」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
参考サイト:Man page of INSTALL
概要・使用方法
現在、システム上で実行されているプロセスの状況を表示します。
書式
$ ps [オプション]
psコマンドは歴史的経緯からUNIX標準オプション/BSDオプション/GNUオプションをサポートしています。そのため、オプションの前に「-」の有無で動作が異なることがあります。また、オプションのハイフン(-)は互換性のために使用できるもので現在は使用しないことを推奨しています。
似たようなオプションでも動作が異なることがあるので、スクリプトなどに実装して利用する場合はpsコマンドを見て、動作確認をしてから使うようにしたほうが良いでしょう。また、ここで「端末」はプロセスに対して入力/出力を送る役割を担うものです。
プロセス表示項目
オプションを指定せず実行すると、ユーザーが端末上で実行しているプロセスについて以下のように表示します。
項目 | 説明 |
---|---|
PID | プロセスID |
TTY | プロセスに関連付けられた端末名 |
TIME | 累積利用CPU時間 |
CMD | 実行ファイル名 |
プロセスの状態(STAT)
psで表示されるプロセスの状態(STAT)はアルファベットで表示され、以下の意味があります。
状態 | 説明 |
---|---|
D | 割り込み不可能なスリーブ状態 |
R | 実行中/実行可能状態 |
S | 割り込み可能なスリーブ状態 |
T | ジョブ制御中/トレース中もしくは停止中、シェルでctrl+zなどして停止しているジョブに表示される |
X | プロセスが死んでいる状態 |
Z | プロセスは終了しているが、親プロセスに回収されなかったゾンビ状態 |
上記STAT状態に加えて以下の情報合付加されることがあります。
付加情報 | 説明 |
---|---|
< | 優先順位の高いプロセス |
N | 優先順位が低いプロセス |
s | セッションリーダー |
l | マルチスレッド化されたプロセス |
+ | フォアグラウンドのプロセスグループに含まれる |
フォーマットに指定できる主な文字列
-O 出力形式を利用すると出力する形式を指定できます。デフォルトでは「ps -eo “%p %y %x %c”」が指定されていますが、NICE値を表示するため、「ps -eo “%p %y %x %n %c”」
フォーマット記述子 | ヘッダ表示 | 説明 |
---|---|---|
pid, %p | PID | プロセスID |
ppid | PPID | 親プロセスのPID |
user, euser, %U | USER/EUSER | 実効ユーザー名 |
ruser, %u | RUSER | 実ユーザー名 |
euid | EUID | 実効ユーザーID |
comm, %c | COMMAND | コマンド名(実効ファイル名) |
pcpu, %C | %CPU | CPU使用率 |
pmem | %MEM | メモリ使用率 |
vsz, %z | VSZ | 仮想メモリの全サイズ(kバイト単位) |
size | SIZE | メモリ上のサイズ(kバイト単位) |
rss | RSS | 常駐セットの大きさ |
tty, %y | TTY | 制御端末 |
stat | STAT | プロセスの状態 |
start | START/STARTED | プロセスの開始時間 |
time, %x | TIME | 累積利用CPU時間 |
nice, %n | NI | ナイス値 |
priority | PRI | 優先度 |
オプション
-A, -e | すべてのプロセスを表示する |
-a | 端末を持たないプロセスを除いてすべてのプロパティを表示する |
a | 端末を持つすべてのプロセスを表示する |
-C コマンド | 指定したコマンドのプロセスを表示する。複数コマンドを表示する場合は「,」で区切る |
–cols 数値 | スクリーン幅を数値で指定する。 |
–width 数値 | 表示幅を指定する。 |
e | コマンド名の後に環境変数などを表示する |
h –no-headers | ヘッダを表示しない |
r | 実行中のプロセスのみを表示する |
x | 制御端末の無いプロセスを表示する |
-s –sid | セッションIDで表示指定する。fオプションを追加すると、ツリー構造表示でわかりやすい |
T | 端末のすべてのプロセスを表示する |
-U, u ユーザ名, –User | 実行ユーザ名や実行ユーザIDのプロセスを表示する。複数指定する場合は「,」で区切る |
-G グループ名, –group | グループ名やグループIDで選択して表示する |
p, -p, –pid | プロセスIDを選択して表示する |
-プロセスID | 指定したプロセスIDのプロセスを表示する |
–ppid プロセスID | 指定したプロセスIDの親プロセスIDを表示する |
-t, t 端末名, –tty 端末名 | 指定した端末に関連づけられたプロセスを表示する |
-l | 長いフォーマットで出力する |
f, –forest | ASCIIアートで階層表示する。 |
-o 出力形式, o 出力形式, –format | 出力形式を指定してプロセス状態を表示する |
–context | SELinuxのセキュリティコンテキストフォーマットで表示する |
実効ユーザーは、そのユーザーのファイルアクセス権がプロセスに適用されるユーザーです。一方、実ユーザーはプロセスを生成(実行)したユーザーです。
ユーザーやグループはユーザー名(グループ名)またはUID(GID)いずれでも指定できます。複数指定する場合は「,」で区切って列挙します。
すべてのプロセスを表示する
$ ps -e
実行例では、「head -n 行数」にパイプして表示する件数を絞っています。
実行結果
[suna@localhost ~]$ ps -e | head -n 10
PID TTY TIME CMD
1 ? 00:00:12 systemd
2 ? 00:00:00 kthreadd
4 ? 00:00:00 kworker/0:0H
6 ? 00:00:15 ksoftirqd/0
7 ? 00:00:00 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:00:48 rcu_sched
10 ? 00:00:00 lru-add-drain
11 ? 00:00:13 watchdog/0
システムで実効しているすべてのプロセスを表示する
$ ps ax
-xオプションは、制御端末を持っていないプロセスを表示できます。通常は、ユーザー操作によってプログラムを実行しプロセスが生成されますが、ユーザー操作以外のプロセスも存在します。それが、デーモンから起動されたプロセスになります。(一定日時になったら起動するプログラム等)デーモンから起動されたプロセスは制御端末を持たないため、通常は非表示になっています。
実行結果
[suna@localhost ~]$ ps ax |head -n 10
PID TTY STAT TIME COMMAND
1 ? Ss 3:08 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
2 ? S 0:00 [kthreadd]
3 ? I< 0:00 [rcu_gp]
4 ? I< 0:00 [rcu_par_gp]
6 ? I< 0:00 [kworker/0:0H-events_highpri]
9 ? I< 0:00 [mm_percpu_wq]
10 ? S 0:00 [rcu_tasks_rude_]
11 ? S 0:00 [rcu_tasks_trace]
12 ? S 0:06 [ksoftirqd/0]
システムで実効しているすべてのプロセスを表示する(ユーザー名含め)
$ ps aux
処理に長い時間を要する場合、他のユーザーがどのようなプロセスを実行しているか確認したい場面があります。そのような場合は、「-u」オプションを付けると良いでしょう。
実行結果
[suna@localhost ~]$ ps aux|head -n 10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 238668 11252 ? Ss 6月28 3:08 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root 2 0.0 0.0 0 0 ? S 6月28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 6月28 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 6月28 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 6月28 0:00 [kworker/0:0H-events_highpri]
root 9 0.0 0.0 0 0 ? I< 6月28 0:00 [mm_percpu_wq]
root 10 0.0 0.0 0 0 ? S 6月28 0:00 [rcu_tasks_rude_]
root 11 0.0 0.0 0 0 ? S 6月28 0:00 [rcu_tasks_trace]
root 12 0.0 0.0 0 0 ? S 6月28 0:06 [ksoftirqd/0]
プロセスの状態を詳細に表示する
$ ps -l
通常は最低限の情報しか表示されないため、より詳細な情報を表示するためには「-l」オプションを付けます。
実行結果
[suna@localhost ~]$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 770884 770876 0 80 0 - 58835 - pts/0 00:00:00 bash
0 R 1000 771795 770884 0 80 0 - 63824 - pts/0 00:00:00 ps
プロセス階層をASCIIアートを使って表示する
$ ps f
-fオプションを指定することで親子関係にあるプロセスを階層構造で表示することができます。
実行結果
[suna@localhost ~]$ ps f
PID TTY STAT TIME COMMAND
27257 pts/0 Ss 0:00 -bash
27351 pts/0 R+ 0:00 \_ ps f
特定のプロセスの状態だけ表示する
$ ps C コマンド
特に指定しなければ全プロセスが表示されてしまうので、特定のプロセスだけ絞って表示することができます。
実行結果
[suna@localhost ~]$ ps -C httpd
PID TTY TIME CMD
3006 ? 00:00:20 httpd
694188 ? 00:00:00 httpd
694189 ? 00:00:06 httpd
694190 ? 00:00:06 httpd
694191 ? 00:00:06 httpd
695664 ? 00:00:07 httpd
プロセスIDを指定して状態を表示する
$ ps -p プロセスID
実行結果
[suna@localhost ~]$ ps -p 3006
PID TTY TIME CMD
3006 ? 00:00:20 httpd
特定のユーザーのプロセスだけ表示する
$ ps -U ユーザー名
実行結果
[suna@localhost ~]$ ps -U suna
PID TTY TIME CMD
770853 ? 00:00:00 systemd
770856 ? 00:00:00 (sd-pam)
770875 ? 00:00:00 pulseaudio
770876 ? 00:00:00 sshd
770884 pts/0 00:00:00 bash
770950 ? 00:00:00 dbus-daemon
772227 pts/0 00:00:00 ps
-oオプションで出力形式を指定する
$ ps -o 出力形式
標準出力形式に「%n」でNICE値を追加している。
実行結果
[sunarin@localhost ~]$ ps -eo "%p %y %x %n %c" | head -n 10
PID TTY TIME NI COMMAND
1 ? 00:00:12 0 systemd
2 ? 00:00:00 0 kthreadd
4 ? 00:00:00 -20 kworker/0:0H
6 ? 00:00:15 0 ksoftirqd/0
7 ? 00:00:00 - migration/0
8 ? 00:00:00 0 rcu_bh
9 ? 00:00:48 0 rcu_sched
10 ? 00:00:00 -20 lru-add-drain
11 ? 00:00:13 - watchdog