全力で怠けたい

怠けるために全力を尽くしたいブログ。

ps コマンドでよく使うオプションのメモ。

ps コマンドでわりとよく使うオプションのメモ。

普段は AWS の EC2 インスタンスに入って使うことが多いのでこのエントリーを書くときも EC2 インスタンスに入って ps コマンドを実行した結果とかをメモっている。

ps コマンドのバージョン。

$ ps --version
procps-ng version 3.3.10

ps コマンドのオプション

ps コマンドはプロセスの情報を表示するコマンド。

自分はなんとなく使うことが多い気がするのでよく使うオプションをメモしておく。

--help オプション: ヘルプ

--help オプションを指定すると ps コマンドの使い方を表示する……んだけど man ps が使えないときにしか使わない。

$ ps --help all

Usage:
 ps [options]

Basic options:
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys

# 省略

--no-header オプション: ヘッダーを表示しない

--no-header オプションを指定するとヘッダーを表示しない。

オプションなしの psPID とか TTY とかヘッダーを表示するけど、

$ ps
  PID TTY          TIME CMD
 3288 pts/0    00:00:00 bash
22180 pts/0    00:00:00 ps

--no-header オプションを指定すると PID とか TTY とかのヘッダーを表示しない。

$ ps --no-header
 3288 pts/0    00:00:00 bash
22180 pts/0    00:00:00 ps

u オプション: プロセスの詳細情報を表示

u オプションを指定するとプロセスの詳細情報を表示する。

$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user  3288  0.0  0.3 125068  4004 pts/0    Ss   14:01   0:00 -bash
ec2-user 22117  0.0  0.4 124992  4140 pts/1    Ss   14:02   0:00 -bash
ec2-user 22199  0.0  0.3 126116  3524 pts/1    S+   14:15   0:00 man ps
ec2-user 22210  0.0  0.2 117300  2624 pts/1    S+   14:15   0:00 less -s
ec2-user 25636  0.0  0.4 164368  4060 pts/0    R+   14:37   0:00 ps u

-f オプション: プロセスの情報を完全なフォーマットで表示

-f オプションを指定するとプロセスの情報を完全なフォーマットで表示する。 親子関係のプロセスをツリー表示してくれる。

$ ps -fu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user 22117  0.0  0.4 124992  4140 pts/1    Ss   14:02   0:00 -bash
ec2-user 22199  0.0  0.3 126116  3524 pts/1    S+   14:15   0:00  \_ man ps
ec2-user 22210  0.0  0.2 117300  2624 pts/1    S+   14:15   0:00      \_ less -s
ec2-user  3288  0.0  0.3 125068  4004 pts/0    Ss   14:01   0:00 -bash
ec2-user 25649  0.0  0.4 164368  4084 pts/0    R+   14:40   0:00  \_ ps -fu

e オプション: 環境変数を表示

e オプションを指定すると COMMAND カラムのコマンドの表示のあとにプロセスの環境変数を表示する。

$ ps e
  PID TTY      STAT   TIME COMMAND
 3288 pts/0    Ss     0:00 -bash LC_ALL=ja_JP.UTF-8
22117 pts/1    Ss     0:00 -bash LC_ALL=ja_JP.UTF-8

-L オプション: プロセスとスレッドを表示

-L オプションを指定するとプロセスとスレッドを表示する。

ps -C dockerd すると dockerd のプロセスは1つだけ表示するけど、

$ ps -C dockerd
  PID TTY          TIME CMD
  885 ?        00:00:04 dockerd

-L オプションを追加するとたくさん表示する。 増えた表示の分がスレッド。

スレッドはたくさん表示するけど PID は全部同じなので表示しているスレッドが同じプロセスのスレッドであることが分かる。 スレッド ID はLWP のところに表示する。

$ ps -L -C dockerd
  PID   LWP TTY          TIME CMD
  885   885 ?        00:00:00 dockerd
  885   981 ?        00:00:00 dockerd
  885   982 ?        00:00:00 dockerd
  885   983 ?        00:00:00 dockerd
  885   984 ?        00:00:00 dockerd

# 省略

-A, -e オプション: すべてのプロセスを表示

-A オプションか -e オプションを指定するとすべてのプロセスを表示する。

man ページの -A オプションの説明のところは select all processes. Identical to -e と書いてあって -A オプションと -e オプションはまったく同じ。

オプションなしの ps はちょっとしかプロセスを表示しないけど、

$ ps
  PID TTY          TIME CMD
 3288 pts/0    00:00:00 bash
22180 pts/0    00:00:00 ps

ps -e するとプロセスがたくさん表示される。

$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:01 systemd
    2 ?        00:00:00 kthreadd
    4 ?        00:00:00 kworker/0:0H
    5 ?        00:00:00 kworker/u30:0
    6 ?        00:00:00 mm_percpu_wq
    7 ?        00:00:00 ksoftirqd/0
    8 ?        00:00:00 rcu_sched

a オプション: 端末を持つプロセスを表示

a オプションを指定すると端末を持つすべてのプロセスを表示する。

端末を持つプロセスであれば他のユーザーのプロセスも表示する。 a オプションを指定すると表示されるプロセスは当然のことながら端末を持っているので TTY のところが tty とか pts みたいになる。

x オプションと組み合わせて使うことが多い => x オプション参照

$ ps a
  PID TTY      STAT   TIME COMMAND
 3202 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
 3203 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
 3288 pts/0    Ss     0:00 -bash
22117 pts/1    Ss     0:00 -bash
22160 pts/1    S+     0:00 man ps
22171 pts/1    S+     0:00 less -s
22196 pts/0    R+     0:00 ps a

x オプション: 端末を持たないプロセスを表示

x オプションを指定すると端末を持たないすべてのプロセスを表示する。

$ ps x
  PID TTY      STAT   TIME COMMAND
 3287 ?        S      0:00 sshd: ec2-user@pts/0
 3288 pts/0    Ss     0:00 -bash
22116 ?        S      0:00 sshd: ec2-user@pts/1
22117 pts/1    Ss     0:00 -bash
22199 pts/1    S+     0:00 man ps
22210 pts/1    S+     0:00 less -s
25561 pts/0    R+     0:00 ps x

x オプションと a オプションを組み合わせると端末を持たないプロセスと端末を持つプロセスを表示するので表示するプロセスの数は -e オプションを指定するときと同じになる。 => 表示するときのカラムが違うとかの相違がある

$ ps -e | wc -l
90

$ ps ax | wc -l
90

r オプション: 実行中のプロセスだけ表示

r オプションを指定すると実行中もしくは実行可能状態のプロセスだけ表示する。

ps u すると何個かのプロセスが表示するけど、

$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user  3288  0.0  0.3 125068  4004 pts/0    Ss   14:01   0:00 -bash
ec2-user 22117  0.0  0.4 124992  4140 pts/1    Ss   14:02   0:00 -bash
ec2-user 22199  0.0  0.3 126116  3524 pts/1    S+   14:15   0:00 man ps
ec2-user 22210  0.0  0.2 117300  2624 pts/1    S+   14:15   0:00 less -s
ec2-user 25631  0.0  0.3 164368  3940 pts/0    R+   14:30   0:00 ps u

r オプションを追加して ps ru すると STATR(R+) のプロセスだけ表示する。

$ ps ru
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user 25633  0.0  0.3 164368  4008 pts/0    R+   14:30   0:00 ps ru

-C オプション: 実行ファイル名を指定して表示

-C オプションで実行ファイル名を指定すると指定した実行ファイルのプロセスだけ表示する。

ps u すると何個かのプロセスが表示するけど、

$ ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user  3288  0.0  0.4 125068  4168 pts/0    Ss   14:01   0:00 -bash
ec2-user 22117  0.0  0.4 124992  4140 pts/1    Ss   14:02   0:00 -bash
ec2-user 22199  0.0  0.3 126116  3524 pts/1    S+   14:15   0:00 man ps
ec2-user 22210  0.0  0.2 117300  2624 pts/1    S+   14:15   0:00 less -s
ec2-user 25758  0.0  0.4 164368  4064 pts/0    R+   15:07   0:00 ps u

-C オプションで -C bash みたいに指定すると bash だけ表示する。

$ ps u -C bash
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ec2-user  3288  0.0  0.4 125068  4168 pts/0    Ss   14:01   0:00 -bash
ec2-user 22117  0.0  0.4 124992  4140 pts/1    Ss   14:02   0:00 -bash

ps コマンドのオプションでちょっと気にしておくこと

ps コマンドのバージョンによってはいくつかのオプション形式に対応している。

e オプション (環境変数を表示) と -e オプション (すべてのプロセスを表示) みたいに - があるかないかでまったく意味が違うオプションがある。

This version of ps accepts several kinds of options:

1   UNIX options, which may be grouped and must be preceded by a dash.
2   BSD options, which may be grouped and must not be used with a dash.
3   GNU long options, which are preceded by two dashes.