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
ppidPPID親プロセスのPID
user,
euser,
%U
USER/EUSER実効ユーザー名
ruser,
%u
RUSER実ユーザー名
euidEUID実効ユーザーID
comm,
%c
COMMANDコマンド名(実効ファイル名)
pcpu,
%C
%CPUCPU使用率
pmem%MEMメモリ使用率
vsz,
%z
VSZ仮想メモリの全サイズ(kバイト単位)
sizeSIZEメモリ上のサイズ(kバイト単位)
rssRSS常駐セットの大きさ
tty,
%y
TTY制御端末
statSTATプロセスの状態
startSTART/STARTEDプロセスの開始時間
time,
%x
TIME累積利用CPU時間
nice,
%n
NIナイス値
priorityPRI優先度

オプション

-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
出力形式を指定してプロセス状態を表示する
–contextSELinuxのセキュリティコンテキストフォーマットで表示する

実効ユーザーは、そのユーザーのファイルアクセス権がプロセスに適用されるユーザーです。一方、実ユーザーはプロセスを生成(実行)したユーザーです。

ユーザーやグループはユーザー名(グループ名)または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