Linuc 101 Linux コマンド -- ps aux と ps -e -u -l -f -eu -- プロセスの詳細表示
前提
WSL で試した。
ps
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) 、つまりプロセスの「状態」も表示されるようになった。
S - Sleeping が割り込み可能な待ち状態
R - Runing Enabled が実行可能なプロセス
s - session leader セッションのリーダー。root user でしか実行できないらしい?
ps u - ユーザー...だけじゃなくたくさんの情報を追加表示!
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
ここによると -e, -ef, -ely, があるらしい
人気がないので全然情報がなかった。
オライリーの Linux ポケットガイドの試供品?で公開されていた
こちらは 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 その他の多くの情報を表示する
引数で 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
- 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 での場合
一番プレーンな状態になるはず
未確認