ターミナルコマンドps
(process status)のオプションの説明と基本的な使用方法をお伝えします。
ps
はプロセスを確認するコマンドです。アクティビティモニタを使用すれば比較的簡単にプロセスを確認することができますが、使い方を工夫するとps
コマンドの方がより早く確認したいプロセスを発見することが可能です。
また、表示する項目を変更したりすることもできるので、より自分に合った確認方法へカスタマイズできるのも魅力です。
今回はターミナルの操作を含みますので起動方法や基本情報がわからない場合は、下記の記事を御確認ください。
プロセスとは
プロセスは稼働中のプログラムです。ジョブとかタスクとも呼ばれます。
アプリを起動するだけでも複数のプロセスが起動したりします。
つまりPCを動かすときに実行され稼働中のプログラムをプロセスと呼びます。
psコマンド基本動作
プロセスを確認するps
コマンドの使い方は下記です。
ps
現在稼働中のプロセスを確認できます。
しかしこれでは情報量が少なすぎてあまり意味がありません。
オプションを付与して検索範囲を広げたり、プロセス情報の項目を増やす必要があります。
psコマンドのオプションとは
ps
コマンドにオプションを付与することで、検索するプロセスの範囲指定や表示する項目を指定したりできます。
これにより自分が知りたいプロセスや確認したいプロセス情報を指定することができます。
オプションの種類
ps
のオプションにはいくつか種類が存在します。
機能的に全く同じなオプションもあります。オプションの種類は下記があります。
- UNIXオプション(ハイフンで始まる)
- BSDオプション(ハイフンつけない)
- GNUロングオプション(ハイフン2つで始まる)
同じ種類のオプションであればps aux
やps -ec
のようにまとめることができますが、BSDオプションとUNIXオプションを組み合わせる場合は下記のようになります。
BSDオプション、UNIXオプション組み合わせ例
ps e -A
BSDオプションの後にUNIXオプションを指定します。(環境によって順番は違うかもしれません)
今回はBSDオプションとUNIXオプションを中心に説明をします。
制御端末について
ps
コマンドの情報の一つに制御端末を表示する項目TTY(もしくはTT)があります。
ここに表示される端末の種類として以下が挙げられます。
- pts ➡︎ 仮装端末
- tty ➡︎ 実端末
- ?? ➡︎ 端末の無いプロセス
デーモン系やアプリなども制御端末がないので「??」と表示されます。
psコマンドオプション
それではオプションの詳細を説明します。
すでにお伝えしましたが、オプションの種類によって機能が被っていたりするので自分の使用しやすいオプションを選んでみてください。
最後にオプション・項目名の意味・プロセスの状態の一覧などを記載しますので参考にしてください。
A,-A,-e
全部のプロセスを表示します。
ps -A
PID TTY TIME CMD
1 ?? 1:09.25 /sbin/launchd
51 ?? 0:02.63 /usr/sbin/syslogd
---以下省略
後述しますがps ax
と同じ機能になります。
a,-a
自分と他ユーザ含め端末操作のプロセスを表示します。
ps -a
PID TTY TIME CMD
6806 ttys001 0:00.02 login -pf D-Box
6807 ttys001 0:00.19 -bash
7215 ttys001 0:00.00 ps -a
制御端末をもつプロセスなので、端末名が表示されます。
c,-c
コマンド名のパスを省いてコマンド名称を表示します。
ps Ac
PID TT STAT TIME COMMAND
1 ?? Ss 1:15.48 launchd
51 ?? Ss 0:02.70 syslogd
---以下省略
コメンド名を確認したい場合は視認しやすくなります。
d,-d
全プロセスのセッションリーダーのみ表示します。
ps d
PID TT STAT TIME COMMAND
230 ?? S 0:00.01 /usr/sbin/rpc.lockd
269 ?? S 0:00.57 /usr/sbin/systemstats --logger-helper /private/var/db/systemstats
--以下省略
e,E,-E
コマンドの環境変数を表示します。
ps e
PID TT STAT TIME COMMAND
6807 s001 S 0:00.27 -bash TMPDIR=/var/folders/ww/8lm0xhdn0d9g52k1kk5q9jbh0000gn/T/ XPC_FLAGS=0x0 Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.AmU6vrodnt/Rende
-f
プロセスを[ユーザID,プロセスID,親プロセスID,短期間のCPU使用率,プロセス開始時刻,制御端末名,CPU使用経過時間,コマンド名]の項目で表示します。
ps -f
UID PID PPID C STIME TTY TIME CMD
501 6807 6806 0 11:39AM ttys001 0:00.32 -bash
h,-h
ページ毎に項目名(ヘッダー)を再度表示します。
大量のプロセスを表示する際どの項目かわからなくなるので視認性が上がります。
j,-j
プロセスを[ユーザ名,プロセスID,親プロセスID,プロセスグループID,セッションID,ジョブコントロールカウント,プロセスの状態,端末名,CPU使用経過時間,コマンド名]の項目で表示します。
ps j
USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
D-Box 6807 6806 6807 0 1 S s001 0:00.36 -bash
L,-L
表示する項目を指定できるオプションo,-o,O,-O
で使用できる項目を一覧で表示します。
ps L
%cpu %mem acflag acflg args blocked caught comm command cpu cputime etime f flags gid group ignored inblk inblock jobc ktrace ktracep lim login logname lstart majflt minflt
msgrcv msgsnd ni nice nivcsw nsignals nsigs nswap nvcsw nwchan oublk oublock p_ru paddr pagein pcpu pending pgid pid pmem ppid pri pstime putime re rgid rgroup rss ruid ruser
sess sig sigmask sl start stat state stime svgid svuid tdev time tpgid tsess tsiz tt tty ucomm uid upr user usrpri utime vsize vsz wchan wq wqb wql wqr xstat
-l
プロセスを[ユーザID,プロセスID,親プロセスID,フラッグ,短期間のCPU使用率,優先順位,ナイス値,確保している仮想メモリサイズ,使用しているメモリ量,プロセス待機中の16進数からの関数,プロセスの状態,スワップアドレス,制御端末名,CPU使用経過時間,コマンド名]の項目で表示します。
ps -l
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 6807 6806 4006 0 31 0 4296240 1628 - S 0 ttys001 0:00.43 -bash
l
プロセスを[ユーザID,プロセスID,親プロセスID,短期間のCPU使用率,優先順位,ナイス値,確保している仮想メモリサイズ,使用しているメモリ量,プロセス待機中の16進数からの関数,プロセスの状態,制御端末名,CPU使用経過時間,コマンド名]の項目で表示します。
ps l
UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
501 6807 6806 0 31 0 4296240 1640 - S s001 0:00.69 -bash
M,-M
プロセスに対応するスレッドを表示します。
ps xM
USER PID TT %CPU STAT PRI STIME UTIME COMMAND
D-Box 332 ?? 0.0 S 31T 0:00.00 0:00.01 /usr/sbin/distnoted agent
332 0.0 S 37T 0:00.00 0:00.00
D-Box 333 ?? 0.0 S 4T 0:00.00 0:00.00 /usr/sbin/cfprefsd agent
333 0.0 S 4T 0:00.00 0:00.00
333 0.0 S 4T 0:00.00 0:00.00
D-Box 334 ?? 0.0 S 31T 0:00.00 0:00.00 /usr/libexec/secd
m,-m
プロセスをメモリ消費率順に表示します。
ps uxmc
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
D-Box 539 3.8 3.2 5424816 1070876 ?? S 火12PM 84:23.22 VBoxHeadless
D-Box 2707 1.1 3.0 7651532 1010112 ?? S 火08PM 29:01.35 MarsEdit
D-Box 769 0.2 1.9 5786864 620984 ?? S 火12PM 23:21.46 Google Chrome Helper
メモリが圧服されているときには便利です。
O,-O
プロセスを通常の項目に加えて、指定した項目で表示します。
[ユーザID,指定した項目,制御端末,プロセスの状態,CPU使用経過時間,コマンド名]
ps -O pcpu,pmem
PID %CPU %MEM TT STAT TIME COMMAND
6807 0.0 0.0 s001 S 0:00.48 -bash
o,-o
プロセスを指定した項目のみで表示します。
ps o pcpu,pmem,tty,lstart,comm
%CPU %MEM TTY STARTED COMM
0.0 0.0 ttys001 木 5/17 11:39:19 2018 -bash
p,-p
指定したプロセスIDでプロセスを表示します。
ps p 501
PID TT STAT TIME COMMAND
501 ?? S 0:00.03 /System/Library/PrivateFrameworks/CoreCDP.framework/Versions/A/Resources/cdpd
r,-r
プロセスをCPU使用率順に表示します。
ps Aucr
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
D-Box 539 3.3 3.2 5424816 1070880 ?? S 火12PM 85:20.05 VBoxHeadless
D-Box 2707 3.3 3.0 7667932 1018636 ?? S 火08PM 33:46.96 MarsEdit
D-Box 7088 0.7 0.1 5624172 35952 ?? S 木12PM 16:46.09 DashboardClient
m,-m
オプションと同様に調査に役立ちます。
T,-T
デバイスに接続しているプロセスを表示します。
ps -T
PID TTY TIME CMD
6806 ttys001 0:00.02 login -pf D-Box
6807 ttys001 0:00.61 -bash
11460 ttys001 0:00.00 ps -T
t,-t
デバイス名を指定して、デバイスに接続しているプロセスを表示します。
ps -t ttys001
PID TTY TIME CMD
6806 ttys001 0:00.02 login -pf D-Box
6807 ttys001 0:00.61 -bash
11461 ttys001 0:00.00 ps -t ttys001
U,-U
ユーザIDでプロセスを実行しているユーザを指定してプロセスを表示します。
ps U 89
PID TT STAT TIME COMMAND
581 ?? S 0:01.40 /usr/libexec/trustd --agent
687 ?? S 0:00.19 /usr/sbin/distnoted agent
---以下省略
-u
ユーザ名でプロセスを実行しているユーザを指定してプロセスを表示します。
ps -u Spotlight
UID PID TTY TIME CMD
89 581 ?? 0:01.40 /usr/libexec/trustd --agent
89 687 ?? 0:00.19 /usr/sbin/distnoted agent
---以下省略
u
プロセスを[ユーザ名,プロセスID,CPU使用率,メモリ消費率,確保している仮想メモリサイズ,使用しているメモリ量,制御端末,プロセスの状態,コマンド起動時刻,CPU使用経過時間,コマンド名]の項目を、CPU使用率順に表示します。
ps u
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
D-Box 6807 0.0 0.0 4296240 1636 s001 S 木11AM 0:00.64 -bash
デフォルトで用意されている項目指定のオプションでは一番視認性が良いと思います。
v,-v
プロセスを[プロセスID,プロセスの状態,CPU使用経過時間,スリープ時間,コア在留時間,ページイン,確保している仮想メモリサイズ,使用しているメモリ量,メモリ使用制限,文字サイズ,CPU使用率,メモリ消費率,コマンド名]の項目を、メモリ消費率順に表示します。
ps Acv
PID STAT TIME SL RE PAGEIN VSZ RSS LIM TSIZ %CPU %MEM COMMAND
539 S 87:04.90 0 0 0 5426340 1072916 - 0 3.4 3.2 VBoxHeadless
2707 S 40:10.28 0 0 0 7682652 1034904 - 0 4.4 3.1 MarsEdit
769 S 23:48.91 0 0 0 5799692 626512 - 0 0.2 1.9 Google Chrome Helper
それぞれの情報一覧
オプション・項目の意味・プロセスの状態など理解が必要な箇所が多いので一覧でまとめました。
わからなくなったら確認してみてください。
オプション一覧
オプション | 機能 |
---|---|
A,-A,-e | 全プロセスを表示 |
a,-a | 自分と他ユーザ含め端末操作のプロセスを表示 |
c,-c | コマンド名のパスを省いてコマンド名称のみ表示 |
d,-d | 全プロセスのセッションリーダーのみ表示 |
e,E,-E | コマンドの環境変数を表示 |
-f | [ユーザID,プロセスID,親プロセスID,CPU使用度,プロセス開始時刻,制御端末名,CPU使用経過時間,コマンド名]の項目で表示 |
h,-h | ページ毎に項目名(ヘッダー)を再度表示 |
j,-j | プロセスを[ユーザ名,プロセスID,親プロセスID,プロセスグループID,セッションID,ジョブコントロールカウント,プロセスの状態,端末名,CPU使用経過時間,コマンド名]の項目で表示 |
L,-L | オプションo,-o,O,-O で使用できる項目を一覧で表示 |
-l | プロセスを[ユーザID,プロセスID,親プロセスID,フラッグ,CPU使用度,優先順位,ナイス値,確保している仮想メモリサイズ,使用しているメモリ量,プロセス待機中の16進数からの関数,プロセスの状態,スワップアドレス,制御端末名,CPU使用経過時間,コマンド名]の項目で表示 |
l | プロセスを[ユーザID,プロセスID,親プロセスID,短期間のCPU使用率,優先順位,ナイス値,確保している仮想メモリサイズ,使用しているメモリ量,プロセス待機中の16進数からの関数,プロセスの状態,制御端末名,CPU使用経過時間,コマンド名]の項目で表示 | M,-M | プロセスに対応するスレッドを表示 |
m,-m | メモリ消費率順に表示 |
O,-O | プロセスを通常の項目に加えて、指定した項目で表示します。 [ユーザID,指定した項目,制御端末,プロセスの状態,CPU使用経過時間,コマンド名] |
o,-o | 指定した項目のみで表示 |
p,-p | 指定したプロセスIDでプロセスを表示 |
r,-r | プロセスをCPU使用率順に表示 |
T,-T | デバイスに接続しているプロセスを表示 |
t,-t | デバイス名を指定して、デバイスに接続しているプロセスを表示 |
U,-U | ユーザIDでプロセスを実行しているユーザを指定してプロセスを表示 |
-u | ユーザ名でプロセスを実行しているユーザを指定してプロセスを表示 |
u | プロセスを[ユーザ名,プロセスID,CPU使用率,メモリ消費率,確保している仮想メモリサイズ,使用しているメモリ量,制御端末,プロセスの状態,コマンド起動時刻,CPU使用経過時間,コマンド名]の項目を、CPU使用率順に表示 |
v,-v | プロセスを[プロセスID,プロセスの状態,CPU使用経過時間,スリープ時間,コア在留時間,ページイン,確保している仮想メモリサイズ,使用しているメモリ量,メモリ使用制限,文字サイズ,CPU使用率,メモリ消費率,コマンド名]の項目を、メモリ消費率順に表示 |
項目(ヘッダー)一覧
オプションo,-o,O,-O
で表示する項目名としても使用できます。
ある程度抜粋しているので、他の項目を使用したい場合はオプションL,-L
で確認してみてください。
項目名 | 意味 |
---|---|
%CPU(pcpu) | CPU使用率 |
CPU | 短期間のCPU使用率 |
COMMAND(CMD) | コメンド名 |
%MEM(pmem) | メモリ消費率 |
PID | プロセスID |
PPID | 親プロセスID |
PGID | グループプロセスID |
START(STARTED) | プロセス起動時刻 |
LSTART | プロセス起動時刻(o,O オプションで項目を指定するとより詳細な時刻を表示) |
TT | 制御端末名(省略形) |
TTY | 制御端末名 |
TIME | CPU使用経過時間 |
USER | ユーザ名 |
UID | ユーザID |
RSS | 使用しているメモリ量 |
VSZ | 確保している仮想メモリサイズ |
STATE(STAT) | プロセスの状態 |
NICE | Nice値(優先度)数字が大きいほど優先度が低い |
SESS | セッションID |
WCHAN | プロセス待機中の16進数からの関数 |
PRI | 優先順位 静的な優先順位はNice値で決まり、動的な優先順位は静的優先順位をベースに決まる |
プロセスの状態一覧
既に何度か記載していますが、項目の「STAT」にはプロセスの状態が表示されます。
記号でプロセス状態が表示されているので一覧で説明します。
1文字目の記号です
ステータス記号 | 意味 |
---|---|
I | アイドル状態(20秒以上スリープしている) |
R | 実行可能または実行中 |
S | 割り込み可能なスリープ状態(20秒未満スリープしている) |
T | ジョブ制御シグナルにより停止 |
U | 無停止待機状態 |
Z | 終了後、親プロセスに回収されなかった死んだ状態 |
2文字目以降の記号です。
ステータス記号 | 意味 |
---|---|
+ | 制御端末のフォアグラウンドプロセスグループに入っている |
< | CPU使用優先度が上がっている |
> | メモリ要求に対するソフトリミットが指定されており、そのリミットを超えている状態。このようなプロセスはメモリの中身をハードディスクに移さない。 |
A | ランダムなページ置換を要求している |
E | 終了中 |
L | 実メモリのページをロックして利用している |
N | CPU使用優先度が下がっている |
S | FIFO(ファーストインファーストアウト)ページ置換を要求している 最初に格納したデータから取り出す方式 |
s | セッションリーダーである |
V | vfork(呼び出したプロセスの子プロセスを生成)の間、一時中断されている |
W | スワップアウト(メモリの中身をハードディスクに移す)されている。 |
X | トレースかデバッグされている |
psの基本使用方法
とても長くなりましたが最後に、上記の情報を踏まえてよく使われる簡単な使用方法を説明したいと思います。
全プロセス表示
ps aux
全部のプロセスを表示する場合はこの方法が使いやすいかと思います。もしくはps Au
とかでもいいですね。
確認したいプロセス名・ファイル名・アプリ名などで調べたい場合はgrep
を使うと便利です。
名前を指定する
ps aux | grep プロセス名・ファイル名・アプリ名
オプションo,-o
で項目を自分の好みで指定するのもオススメです。
項目を指定する
ps axho user,pid,ppid,pri,pcpu,pmem,vsz,rss,lstart,command
USER PID PPID PRI %CPU %MEM VSZ RSS STARTED COMMAND
root 1 0 37 0.0 0.1 4329032 22384 火 5/15 12:02:13 2018 /sbin/launchd
root 51 1 4 0.0 0.0 4305532 1544 火 5/15 12:02:14 2018 /usr/sbin/syslogd
「lstart」を指定するとプロセス起動日時を詳細に確認できて結構便利です。
自分が使用するps
コマンドのオプションが決まっている場合は、エイリアスに登録しておくと毎回入力せずに済むので便利です。
エイリアス登録方法は以下の記事で説明しています。
以上になります。とても長くなりましたが何か参考になれば幸いです。