psコマンドの使い方

Linux サーバのプロセスを監視するのに ps コマンドをよく使います。 ps コマンドを実行すると、実行時に起動しているプロセスの一覧が表示されます。この ps コマンドのオプションや実行結果をまとめて見ました。

スポンサーリンク




psコマンドでよく使うオプションと実行例

オプションなしの場合

オプションを指定しないで ps コマンドを実行する場合、ユーザ自身が端末から実行したプロセスのみ表示されます。もちろん自分自身が実行したpsも含まれて表示されます。

root@debian:~# ps
  PID TTY          TIME CMD
 3925 pts/0    00:00:00 sudo
 3926 pts/0    00:00:00 su
 3927 pts/0    00:00:00 zsh
 3937 pts/0    00:00:00 ps
表示 内容
PID プロセスID
TTY プロセスを制御している端末 (制御端末がない場合は、メッセージ ? が出力される)
TITME 使用されたCPU時間
CMD 実行しているコマンド

オプション「u」を使用した場合

オプション u をつけて ps コマンドを実行した場合、ユーザー名と開始時刻の情報を付加し表示されます。

root@debian:~# ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1154  0.0  0.0  16952  1772 tty1     Ss+  08:41   0:00 /sbin/agetty --noclear tty1 linux
root      3925  0.0  0.1  53792  3988 pts/0    S    10:05   0:00 sudo su -
root      3926  0.0  0.1  53296  3624 pts/0    S    10:05   0:00 su -
root      3927  0.0  0.2  41044  5184 pts/0    S    10:05   0:00 -su
root      3964  0.0  0.1  38376  3360 pts/0    R+   10:08   0:00 ps u
表示 内容
USER 実行ユーザ
PID プロセスID
%CPU CPU時間と実際に処理した時間の比率
%MEM 実メモリの使用量
VSZ 使用している仮想メモリサイズ( kbytes 単位)
RSS 使用している物理(スワップされていない)メモリサイズ( kbytes 単位)
STAT 別表参照
START 開始時刻
COMMAND 実行しているコマンド

上記、 ps コマンドの結果表示のうち左から8項目めに STAT があります。文字の組み合わせでプロセスの状態を表示しています。1文字目とそれ以降の文字で内容が変わるのでそれぞれまとめて見ました。

STAT との内容(1文字目)

ステータス 内容
D ディスク(あるいは他の割り込み不可能な短期間の)待ち状態
I idle状態(20秒以上スリープしている)
J jail上で実行
R runnable(実行可能)状態
S 20秒未満のsleep状態
T stop状態
Z 死んでいる(ゾンビ)状態

STAT の内容(2文字目以降)

ステータス 内容
+ 制御端末のフォアグラウンドプロセスグループに属している
> CPU のスケジュール優先度が上げられている
< メモリ要求に対するソフトリミットが指定されており、現在そのリミットを超えている。このようなプロセスは(必然的に)スワップされない
A ランダムなページスワップを要求した
E 終了しようとしている
L 実メモリ中にロックされたページを持っている
N スケジューリング優先度が下げられている
S FIFO ページスワップを要求した
s セッションリーダである
V vfork の間、一時中断されている
W スワップアウトされている
X トレースされているかデバッグされている

オプション「l」を使用した場合

オプション l をつけて ps コマンドを使用した場合、より詳細な情報を表示します。

root@debian:~# ps l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  3925  3910  0  80   0 - 13448 poll_s pts/0    00:00:00 sudo
4 S     0  3926  3925  0  80   0 - 13324 wait   pts/0    00:00:00 su
4 S     0  3927  3926  0  80   0 - 10261 sigsus pts/0    00:00:00 zsh
4 R     0  3992  3927  0  80   0 -  7482 -      pts/0    00:00:00 ps
表示 内容
F 現在の状態を示す16進のフラグ。詳細は、別表参照
PPID 親プロセスのプロセスID
PRI 優先順位(小さい数字のほうが優先順位が高い。)
NI 標準 UNIX の NICE 値:正の値ならより少ない CPU 時間が割当てられる
WCHAN 休眠状態の時のカーネル関数名( sys_ は省略)

一番右の項目Fはプロセスの状態を表すのですが、次のような内容になります。

F の内容

表示 内容
00 終了している。
01 システムプロセス。常にメモリー上にある。
02 親プロセスからトレースされている。
04 親プロセスからトレースされて、停止されている。
08 シグナルで起動できない。
10 メモリー上にあり、イベント終了までロックされている。
20 スワップ出来ない。

オプション「a」を使用した場合

オプション a をつけて ps コマンドを使用した場合、すべてのユーザープロセスを表示します。

root@debian:~# ps a
  PID TTY      STAT   TIME COMMAND
 1154 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
 3910 pts/0    Ss     0:00 /bin/zsh
 3925 pts/0    S      0:00 sudo su -
 3926 pts/0    S      0:00 su -
 3927 pts/0    S      0:00 -su
 4025 pts/0    R+     0:00 ps a

オプション「x」を使用した場合

オプション x をつけて ps コマンドを実行すると、制御端末のないプロセス情報も表示します。

root@debian:~# ps x
    1 ?        Ss     0:01 /sbin/init splash
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00 [ksoftirqd/0]
    5 ?        S< 0:00 [kworker/0:0H]
    7 ?        S      0:01 [rcu_sched]
    8 ?        S      0:00 [rcu_bh]
    9 ?        S      0:00 [migration/0]
   10 ?        S      0:00 [watchdog/0]
   11 ?        S      0:00 [kdevtmpfs]
   12 ?        S<     0:00 [netns]
   13 ?        S<     0:00 [perf]
   14 ?        S      0:00 [khungtaskd]

オプション「f」を使用した場合

オプション f をつけて ps コマンドを実行すると、プロセスの親子関係をツリー状に表示します。

root@debian:~# ps f
  PID TTY      STAT   TIME COMMAND
 3925 pts/0    S      0:00 sudo su -
 3926 pts/0    S      0:00  \_ su -
 3927 pts/0    S      0:00      \_ -su
 4131 pts/0    R+     0:00          \_ ps f
 1154 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux

ps コマンドの便利な使い方

これらオプションは、組み合わせて使うこともできます。例えば、制御端末のないプロセスも含め全ユーザのプロセスをユーザ名と開始時刻をの情報を付加した状態で表示する場合は、「ps aux」というようにオプションをつなげて実行できます。

ps コマンドはいろいろなオプションをつけて実行できますがよく使うオプションは、 aux とか alx とかなのですが表示される情報量が多すぎて探すの大変です。そこでよく使う方法が grep コマンドと一緒に使う方法です。具体的には|(パイプ)をつけてgrepを実行します。実行するコマンドは下記のようになります。

ps alx | grep XXXXX

XXXXXにはPSコマンドで調べたいプロセス名などを入力して使います。実行結果は次のようになります。

root@debian:~# ps alx | grep ntpd
5   104  1956     1  20   0   5736  1276 poll_s Ss   ?          0:01 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 104:109
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする