ps コマンド

# ps

この記事は [Linux コマンド 全部オレ Advent Calendar 2017](https://adventar.org/calendars/2630) の3日目の記事です。

```
NAME
       ps - report a snapshot of the current processes.

SYNOPSIS
       ps [options]

DESCRIPTION
       ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed
       information, use top(1) instead.

       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.

       Options of different types may be freely mixed, but conflicts can appear. There are some synonymous options, which are functionally identical,
       due to the many standards and ps implementations that this ps is compatible with.

       Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards require that "ps -aux" print all processes owned by a user named
       "x", as well as printing all processes that would be selected by the -a option. If the user named "x" does not exist, this ps may interpret the
       command as "ps aux" instead and print a warning. This behavior is intended to aid in transitioning old scripts and habits. It is fragile,
       subject to change, and thus should not be relied upon.

       By default, ps selects all processes with the same effective user ID (euid=EUID) as the current user and associated with the same terminal as
       the invoker. It displays the process ID (pid=PID), the terminal associated with the process (tname=TTY), the cumulated CPU time in
       [dd-]hh:mm:ss format (time=TIME), and the executable name (ucmd=CMD). Output is unsorted by default.

       The use of BSD-style options will add process state (stat=STAT) to the default display and show the command args (args=COMMAND) instead of the
       executable name. You can override this with the PS_FORMAT environment variable. The use of BSD-style options will also change the process
       selection to include processes on other terminals (TTYs) that are owned by you; alternately, this may be described as setting the selection to
       be the set of all processes filtered to exclude processes owned by other users or not on a terminal. These effects are not considered when
       options are described as being "identical" below, so -M will be considered identical to Z and so on.

       Except as described below, process selection options are additive. The default selection is discarded, and then the selected processes are
       added to the set of processes to be displayed. A process will thus be shown if it meets any of the given selection criteria.
```

## よく使いそうな使い方

```
[sinsengumi ~]$ ps auxf | grep -e fluentd -e USER | grep -v grep
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     143350  0.0  2.1 246224 41136 ?        Sl   Nov27   1:58 supervisor:fluentd
root     143434  0.0  2.4 273908 45216 ?        Sl   Nov27   5:50  \_ worker:fluentd
```

- `a`: 端末操作のプロセスを表示
- `u`: CPU やメモリの使用率なども表示
- `x`: 端末操作以外のプロセスを表示
- `f`: プロセスを階層で表示する

| 項目     | 説明              |
|---------|-------------------|
| USER    | プロセスの所有ユーザー |
| PID     | プロセス番号 |
| %CPU    | プロセスの CPU 使用率（CPU 利用時間/実際の時間）。瞬間的な CPU 使用率ではないことに注意|
| %MEM    | プロセスが確保している物理メモリを百分率で表示 |
| VSZ     | プロセスが仮想メモリ領域のサイズ [KB] |
| RSS     | プロセスが物理メモリ領域のサイズ [KB] |
| TTY     | 制御端末（`?` はデーモンなど） |
| STAT    | プロセスの状態 |
| START   | プロセスの開始時刻 |
| TIME    | プロセスが実際に CPU を使った時間 |
| COMMAND | プロセスの実行コマンド |


## 参考

- http://hogem.hatenablog.com/entry/20100228/1267370965
- https://qiita.com/toshihirock/items/565fe71d778d3ee36b96