端くれプログラマの備忘録 Unix [Unix] ps – 実行中のプロセスを一覧表示する

[Unix] ps – 実行中のプロセスを一覧表示する

よく使う割に使いこなせていないので再勉強。

まずは –help で指定可能なオプションを確認。

$ ps --help
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
                                      -q by process ID (unsorted & quick)
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                                      --quick-pid
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy

自分のプロセスを表示する。

$ ps
  PID TTY          TIME CMD
28603 pts/0    00:00:00 bash
28795 pts/0    00:00:00 ps

l オプションを付けるとロング形式で表示される。

$ ps l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1001 28603 28602  20   0 115440  2072 do_wai Ss   pts/0      0:00 -bash
0  1001 28847 28603  20   0 153236  1512 -      R+   pts/0      0:00 ps l

良く使われるのは aux オプション。全ユーザが実行しているプロセスを表示する。

  • a – 端末を持つ全てのプロセスを表示する
  • x – 端末を持たない全てのプロセスを表示する
  • u – ユーザー指向のフォーマット(読みやすさ優先)で表示する
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1210  0.0  0.0      0     0 ?        S<   Apr16   0:00 [xfs-eofblocks/v]
root      1211  0.0  0.0      0     0 ?        S    Apr16   2:58 [xfsaild/vda1]
root      1298  0.0  0.3  37236  3744 ?        Ss   Apr16   0:08  /usr/lib/systemd/systemd-journald
root      1610  0.0  0.0  55520   904 ?        S<sl Apr16   0:00 /sbin/auditd
root      2272  0.0  0.0      0     0 ?        S<   Apr16   0:00 [ttm_swap]
root      2435  0.0  0.0      0     0 ?        S<   Apr16   0:00 [kvm-irqfd-clean]
rpc       2454  0.0  0.1  69264  1196 ?        Ss   Apr16   0:01 /sbin/rpcbind -w
root      2456  0.0  0.1  26376  1748 ?        Ss   Apr16   0:05  /usr/lib/systemd/systemd-logind
polkitd   2458  0.0  1.3 612636 13764 ?        Ssl  Apr16   0:00  /usr/lib/polkit-1/polkitd --no-debug
dbus      2461  0.0  0.2  58096  2376 ?        Ss   Apr16   0:14  /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile  --systemd-act
ivation
root      2462  0.0  0.1 195096  1248 ?        Ssl  Apr16   0:00  /usr/sbin/gssproxy -D
chrony    2480  0.0  0.1 117784  1804 ?        S    Apr16   0:00 /usr/sbin/chronyd
root      2500  0.0  2.8 358088 28552 ?        Ssl  Apr16   0:00 /usr/bin/python  -Es /usr/sbin/firewalld --nofork --nopid
root      3017  0.0  1.8 573924 19256 ?        Ssl  Apr16   1:19 /usr/bin/python2  -Es /usr/sbin/tuned -l -P
root      3019  0.0  1.7 422948 17936 ?        Ss   Apr16   0:35 /usr/sbin/httpd  -DFOREGROUND
mysql     3062  0.0  0.1 113308  1624 ?        Ss   Apr16   0:00 /bin/sh  /usr/bin/mysqld_safe --basedir=/usr
mysql     3282  0.0 11.9 981120 121312 ?       Sl   Apr16   4:55  /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql  --plugin-dir=/usr/lib64

-L オプションを指定すればスレッドを表示できる。

$ ps aux -L | grep httpd
root      3019  3019  0.0    1  1.7 422948 17936 ?        Ss   Apr16   0:35  /usr/sbin/httpd -DFOREGROUND
apache   18408 18408  0.0    1  2.4 432912 24628 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   18457 18457  0.0    1  2.2 430860 22516 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   18827 18827  0.0    1  2.2 430796 22476 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   21353 21353  0.0    1  2.6 436388 26772 ?        S    Apr22   0:01  /usr/sbin/httpd -DFOREGROUND
apache   24016 24016  0.0    1  2.4 432972 24612 ?        S    Apr23   0:01  /usr/sbin/httpd -DFOREGROUND
apache   24564 24564  0.0    1  2.2 430668 22364 ?        S    Apr23   0:01  /usr/sbin/httpd -DFOREGROUND
apache   25239 25239  0.0    1  1.9 428628 19964 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25249 25249  0.0    1  2.1 430588 21476 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25292 25292  0.0    1  1.1 423348 12144 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25293 25293  0.0    1  1.2 423480 12236 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND

grepで絞る代わりに -C オプションでコマンド指定すればヘッダが表示できる。

$ ps aux -C httpd -L
USER       PID   LWP %CPU NLWP %MEM    VSZ   RSS TTY      STAT START   TIME  COMMAND
root      3019  3019  0.0    1  1.7 422948 17936 ?        Ss   Apr16   0:35  /usr/sbin/httpd -DFOREGROUND
apache   18408 18408  0.0    1  2.4 432912 24628 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   18457 18457  0.0    1  2.2 430860 22516 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   18827 18827  0.0    1  2.2 430796 22476 ?        S    Apr21   0:01  /usr/sbin/httpd -DFOREGROUND
apache   21353 21353  0.0    1  2.6 436388 26772 ?        S    Apr22   0:01  /usr/sbin/httpd -DFOREGROUND
apache   24016 24016  0.0    1  2.4 432972 24612 ?        S    Apr23   0:01  /usr/sbin/httpd -DFOREGROUND
apache   24564 24564  0.0    1  2.2 430668 22364 ?        S    Apr23   0:01  /usr/sbin/httpd -DFOREGROUND
apache   25239 25239  0.0    1  1.9 428628 19964 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25249 25249  0.0    1  2.1 430588 21476 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25292 25292  0.0    1  1.1 423348 12144 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND
apache   25293 25293  0.0    1  1.2 423480 12236 ?        S    Apr23   0:00  /usr/sbin/httpd -DFOREGROUND

カラムの意味

  • F – プロセスの状態(16進表記)
    00- 終了
    01 – システム上の常駐プロセス
    02 – 親プロセスからトレースされている
    04 – 親プロセスからトレースされている状態で停止している
    08 – 起動不可能
    10 – プロセスがメモリ上にありイベント終了までロックされている
    20- スワップ不可能
  • PID – プロセスのID番号
  • PPID – 親プロセスのID番号
  • S – プロセスの状態表示
  • STAT – 複数文字によるプロセスの状態表示
    ▼1文字目
    R – 実行中/実行可能な状態
    S – スリープ状態
    D – スリープ状態(割り込み不可) (ディスク待ちが多い)
    T – 停止またはトレース中(シェルでCtrl+Zキーで停止している時など)
    Z – ゾンビプロセス(終了しているのにメモリに残ってしまっているプロセス)
    ▼2文字目以降
    + – フォアグラウンドのプロセスグループ
    s – セッションリーダー
    < – 優先度が高いプロセス
    N – 優先度が低いプロセス
    l – マルチスレッドのプロセス
  • %CPU – CPUの使用率 (CPU利用時間/実際の時間)
  • %MEM – メモリの使用量 (プロセスが確保している物理メモリを百分率で表示)
  • VSZ(Virtual Set Size) – プロセスが確保した仮想メモリ領域のサイズ (KB)
  • RSS(Resident Set Size) – プロセスが確保した物理メモリ領域のサイズ (KB)
  • TIME – CPUの累積使用時間
  • STARTED – コマンドが起動した時刻
  • NI – nice値(プロセスの優先順位)範囲は-20~19で、19が優先度が一番高い
  • COMMAND – コマンド名
  • TT – 制御端末(tty)
  • UID – 実効ユーザーのID番号
  • USER – 実効ユーザーの名前
  • GID – 実効グループのID番号
  • GROUP – 実効グループの名前
  • LWP – 軽量プロセスもしくはスレッドのID
  • NLWP – 総スレッド数

参考サイト

Man page of PS
http://linuxjm.osdn.jp/html/procps/man1/ps.1.html

【 ps 】コマンド――実行中のプロセスを一覧表示する:Linux基本コマンドTips(6) – @IT
https://www.atmarkit.co.jp/ait/articles/1603/28/news022.html

psコマンドで表示される内容について調べた – Qiita
https://qiita.com/toshihirock/items/565fe71d778d3ee36b96

psコマンドまとめ – Qiita
https://qiita.com/shell/items/68ed71a7f018e5688f73

psコマンドでスレッドを表示させたり、スレッドごとのCPU使用率を確認する – 元RX-7乗りの適当な日々
https://www.na3.jp/entry/20101219/p1

30 Useful ‘ps Command’ Examples for Linux Process Monitoring
https://www.tecmint.com/ps-command-examples-for-linux-process-monitoring/