KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Linuc 101 Linux コマンド -- ps aux と ps -e -u -l -f -eu -- プロセスの詳細表示

前提

WSL で試した。

ps

qiita.com

uxmilk.jp

ProcesS 、プロセスを表示するコマンド

引数におなじみの UNIX 方式のつけかたと、見慣れない? BSD 方式がある。

ps
  PID TTY          TIME CMD
  125 tty1     00:00:00 init
  126 tty1     00:00:00 bash
  220 tty1     00:00:00 ps

単発で打つと簡素に プロセス ID 、実行消費時間(後述) 、実行コマンド、 を表示する。

BSD の引数 aux

ハイフンをつけないで連続で付け足していく方式。

ps a, ps u, ps x, があり、合成して使うときは ps au, ps ux, と連続でならべる

aux が最強。

しかし後述の UNIX 方式の方が情報が多い。ので実は aux は最強ではない

ps a - ALL 、全て!ではなく状態を追加表示

プロセスリーダーを除く全てのプロセスを表示する。

ps a
  PID TTY      STAT   TIME COMMAND
  125 tty1     Ss     0:00 /init
  126 tty1     S      0:00 -bash
  221 tty1     R      0:00 ps a

ここでは表示されているものは増えていないが、 STAT ( Status) 、つまりプロセスの「状態」も表示されるようになった。

qiita.com

S - Sleeping が割り込み可能な待ち状態

R - Runing Enabled が実行可能なプロセス

s - session leader セッションのリーダー。root user でしか実行できないらしい?

ps u - ユーザー...だけじゃなくたくさんの情報を追加表示!

linuxhint.com

ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       125  0.0  0.0   8940   228 tty1     Ss   20:21   0:00 /init
root       126  0.0  0.0  18080  3580 tty1     S    20:21   0:00 -bash
root       222  0.0  0.0  18648  1892 tty1     R    22:30   0:00 ps u
  • USER: 各プロセスの実行ユーザー
  • PID: プロセスの ID
  • %CPU: CPU の稼働率
  • %MEM: プロセスが使っているメモリの%
  • VSZ: Virtual SiZe: 仮想領域のサイズ
  • RSS: Real procesS Size: 物理領域のサイズ、略す前が違うかも
  • TTY: TelTYpe: プロセスが動いているターミナル
  • STAT: STATe: プロセスの状態。後述
  • START: プロセスが始まった時間
  • TIME: プログラムがプロセスを占有した時間?
  • CMMAND: そのプロセスを発動したコマンド

を追加表示する。ユーザーだけじゃないんかい!

ps x - デーモン、隠されたプロセスも表示

デーモン、つまり動いてるプロセスを表示する

ps x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:00 /init
  125 tty1     Ss     0:00 /init
  126 tty1     S      0:00 -bash
  223 tty1     R      0:00 ps x

PID 1 の 本当の最初に実行されるプロセスも追加で表示された。

PID 125 がスマブラのラスボスだとすると、隠された本当のラスボス的な?

仮想端末ファイルは不明、ステータスは Stopped session leader にさらに No.1 がついている。端末ナンバーワンプロセス。

ps aux - 状態もユーザーその他もデーモンも全部出す!

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   8940   316 ?        Ssl  Apr03   0:00 /init
root       125  0.0  0.0   8940   228 tty1     Ss   20:21   0:00 /init
root       126  0.0  0.0  18080  3580 tty1     S    20:21   0:00 -bash
root       224  0.0  0.0  18648  1888 tty1     R    22:39   0:00 ps aux

ステータス、ユーザーその他、本当に最初のプロセス、 をすべて出せる最強のコマンド!!!

ps aux | grep bash

grep YourString とのパイプ。

root       126  0.0  0.0  18080  3580 tty1     S    20:21   0:00 -bash
root       230  0.0  0.0  16208  1284 tty1     S    22:43   0:00 grep --color=auto bash

bash と入っているプロセスのみを実行できる。 検索しているときにその文字列がはいる以上、どうしても検索するために打ったコマンドも 結果にでてきてしまうのはしょうがなさそう。

なお aux では万全ではなく、より詳細な情報を表示するためには UNIX option が必要となる。


UNIX の引数 ps -e -u -l -f -eu

blue-red.ddo.jp

ここによると -e, -ef, -ely, があるらしい

人気がないので全然情報がなかった。

www.oreilly.com

オライリーLinux ポケットガイドの試供品?で公開されていた

www.techonthenet.com

こちらは Docker for Mac で試す

ps 引数なし

  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   42 pts/0    00:00:00 ps

そもそも引数をつけない ps の結果がこう。bash しかない

ps -e , プロセスリーダーのデーモンも表示

全てのプロセスを表示する。プロセスリーダーを除くとの注釈がないので、 プロセスリーダーも表示するのが、BSD の ps a との違い。

init プロセスがある WSL で試すと

 ps a
  PID TTY      STAT   TIME COMMAND
    7 tty1     Ss     0:00 /init
    8 tty1     S      0:00 -bash
  101 tty1     R      0:00 ps a

ps -e
  PID TTY          TIME CMD
    1 ?        00:00:00 init
    7 tty1     00:00:00 init
    8 tty1     00:00:00 bash
  102 tty1     00:00:00 ps

ps -e は ps -ax と同じで pid 1 のデーモンも表示されると推測。

ps -u -- USER, CPU, VSZ, その他のたくさんの情報を表示

ps -ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   4108  3464 pts/0    Ss   Apr09   0:00 /bin/bash
root        43  0.0  0.1   5880  2920 pts/0    R+   19:58   0:00 ps -ux

BSD 引数の ps u と同じ。user その他の多くの情報を表示する

eng-entrance.com

引数で user 指定ができるらしい。複数ユーザーがある端末で要検証。

ps -l , LONG LISTING -- F, S, NI, PRI などをたくさん表示

ps -l  
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 -  1027 -      pts/0    00:00:00 bash
0 R     0    30     1  0  80   0 -  1450 -      pts/0    00:00:00 ps

F と S 、PPID 、NI、... などと詳しく出るが大半がわからなかった

  • PPID: Parent Process ID、そのプロセスを作ったプロセスの ID

www.tecmint.com

  • NI: Nice 値。ユーザースペースでの優先度。
  • PRI: Priority. カーネルで見られる実際の優先度。

以下不明、いずれ調べる。

  • ADDR: アドレスかな?不明
  • UID: ユニーク ID かな?唯一の ID ならなぜ 0?
  • F
  • S
  • C
  • SZ
  • WCHAN: わかなちゃん??

ps -f, FULL LIST - UserID, PPID, C, STIME, も表示。短め

フルでリスト表示できるらしい。-u の方が多いのに何がフルなのか...

ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Apr09 pts/0    00:00:00 /bin/bash
root        31     1  0 12:04 pts/0    00:00:00 ps -f

C, STIME, が出る

Stime は がプロセスの起動時間、Started Time だと推測。

C は不明

-ly, LONG LIST から F がなくなるやつ

 ps -ly
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0     1     0  0  80   0  3464  1027 -      pts/0    00:00:00 bash
R     0    35     1  0  80   0  1088  1450 -      pts/0    00:00:00 ps

-ly か -ely でしか使えない。-y はできない

-el と比べて F のカラムが抜けている。

ps -eu, 実行コマンドをパス付きで表示

ps -eu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   4108  3464 pts/0    Ss   Apr09   0:00 /bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOST
root        68  0.0  0.1   5880  2812 pts/0    R+   20:32   0:00 ps -eu HOSTNAME=5a8638528c62 PWD=/ HOME=/root LS_COLORS=rs=0:di=01;34:ln=01;36:m

-e と -u を合成した結果ではなさそう。実行コマンドが実行環境のパスつきで出る。

まとめ

UNIX option ではわからないことが多い。

しかし BSD ではわからなかった PPID, NI, STIME, UID, などの情報もでるので、 ps aux だけじゃなくて こちらの -e, -u, -l , -f, -eu, も使えたら強そう。


Docker で init プロセスが見つからない問題

ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   4108  3460 pts/0    Ss   Apr09   0:00 /bin/bash
root        25  0.0  0.1   5880  2900 pts/0    R+   12:00   0:00 ps aux

init プロセスがないので練習には不適なのだろうか?

そもそもどう普通のと違うのか要検証

X server での場合

一番プレーンな状態になるはず

未確認