PS(1)

名前
ps - プロセスの状態を報告する

書式
ps [options]

説明
ps は現在のプロセスのスナップショットを与える。 この状態を繰り返し更新して見たい場合は top(1) を用いること。 この man ページは、 /proc ベースの ps を解説する (しようとする) ものである。

コマンドラインオプション
このバージョンの ps が受付けるオプションにはいくつかの種類がある。
    Unix98 オプションはまとめることが可能で、前にはダッシュを置かなければならない。
    BSD オプションはまとめることが可能で、前にダッシュを置いてはならない。
    GNU の長いオプションは、前に二つのダッシュを置く。
別々の種類のオプションは自由に混在させてよい。 I_WANT_A_BROKEN_PS 環境変数をセットすると、 前にダッシュが置かれていても BSD オプションとして解釈するようになる。 PS_PERSONALITY 環境変数 (後述) をセットすると、 ps の振舞いをもっと細かく制御できる。

  単純なプロセス選択
スイッチ | 説明
-A | 全てのプロセスを選択する
-N | 選択の否定
-a | tty を持つうち、セッションリーダを除く全てを選択する
-d | 全てを選択するが、セッションリーダを除く
-e | 全てのプロセスを選択する
T | このターミナルの全てのプロセスを選択する
a | 他のユーザのものも含め、このターミナルの全てのプロセスを選択する
g | グループリーダーも含め、本当に全てを選択する (SunOS 設定がなければ何もしない)
r | 実行中のプロセスのみ出力する
x | 制御端末のないプロセスを選択する
--deselect | 選択を無効にする

  リストによるプロセス選択
スイッチ | 説明
-C | コマンド名で選択する
-G | RGID で選択する (名前も可)
-U | RUID で選択する (名前も可)
-g | セッションリーダーとグループ名の論理和で選択する
-p | PID で選択する
-s | 与えたセッションに属するプロセスを選択する
-t | tty で選択する
-u | 実効ユーザー ID で選択する (名前も可)
U | 指定したユーザーのプロセスを選択する
p | プロセス ID で選択する
t | tty で選択する
--Group | 実グループ名または ID で選択する
--User | 実ユーザー名または ID で選択する
--group | 実効グループ名または ID で選択する
--pid | プロセス ID で選択する
--sid | セッション ID で選択する
--tty | 端末で選択する
--user | 実効ユーザー名または ID で選択する
-123 | --sid を暗黙のうちに仮定する
123 | pid を暗黙のうちに仮定する

  出力フォーマットの制御
スイッチ | 説明
-O | プリロードされた "-o"
-c | -l オプションの出力で、 デフォルトと異なるスケジューリング情報を表示させる
-j | jobs フォーマット
-l | 長いフォーマット
-o | ユーザー定義フォーマット
-y | フラグを表示しない。addr の代わりに rss を表示する。
O | プリロードされた "o" (overloaded)
X | 古い Linux i386 レジスタフォーマット
j | ジョブ制御フォーマット
l | 長いフォーマット
o | ユーザー定義フォーマット
s | シグナルフォーマット
u | ユーザー指向のフォーマット
v | 仮想メモリフォーマット
--format | ユーザー定義フォーマット

  出力修正指定
スイッチ | 説明
-H | プロセスを階層表示する (forest)
-m | スレッドを表示する
-n | 名前リストファイルを指定する
-w | 広い幅で出力する
C | %CPU に、減衰平均でなく raw CPU 時間を表示する
N | 名前リストファイルを指定する
O | ソート順の指定 (上書きされる)
S | 死んだ子プロセスも (親プロセスへの加算として) 含める
c | 本当のコマンド名
e | コマンドの後に環境を表示する
f | ASCII アートでプロセス階層を表示する (forest)
--cumulative | 死んだ子プロセスも (親プロセスへの加算として) 含める
--forest | ASCII アートでプロセス階層を表示する
--html | HTML エスケープ付きで出力する
--headers | ヘッダ行を繰り返す
--no-headers | ヘッダ行を一切表示しない
--lines | スクリーンの行数を設定する
--nul | 出力を NUL で桁揃えしない
--null | 出力を NUL で桁揃えしない
--rows | スクリーンの行数を設定する
--sort | ソート順の指定
--width | スクリーンの桁数を指定する
--zero | 出力を NUL で桁揃えしない

  情報
スイッチ | 説明
-V | バージョンを表示する
L | フォーマット指定を全てリストする
V | バージョン情報を表示する
--help | ヘルプメッセージを表示する
--info | デバッグ情報を表示する
--version | バージョンを表示する

  obsolete なオプション
スイッチ | 説明
A | 引数の領域を増やす (DecUnix)
M | 別の core を用いる (代わりに -n または N を用いてみよ)
W | スワップ情報を ... ではなく /dev/drum から取得する (代わりに -n または N を用いてみよ)
k | c のダンプファイルに /vmcore を用いる (代わりに -n または N を用いてみよ)

注意
"-g" オプションは、セッションリーダーまたはグループ名で選択ができる。 セッションリーダーでの選択が多くの標準で指定されているが、 グループでの選択を論理的な動作として用いている OS もいくつか存在する。 この ps は、リストが完全に数値で与えられた場合 (セッションはそう)、 セッションリーダーでの選択を行う。グループ ID 番号は、 他にグループ名がいくつか指定された場合に限って動作する。 "m" オプションは用いるべきでない。 "-m" または "-o" をリストとともに用いるのがよい。 ("m" はメモリ情報の表示・スレッド表示・メモリ利用順ソートに用いられる)。 "h" オプションには問題がある。 標準的な BSD の ps では、 このオプションは出力の各ページにヘッダを印字することになるが、 古い Linux ではヘッダを全く印字しないことになる。 この ps では Linux の利用法に倣い、ヘッダを印字しない。 ただし別途 BSD の流儀が選択されていれば、 出力の各ページにヘッダを印字するようになる。 長いオプションである --headers や --no-headers を使えば、 現在の流儀に関係なく、各ページにヘッダを印字するか、 全くヘッダを印字しないかを選択することができる。 端末 (tty またはスクリーンまたはテキスト出力) の選択にはいくつか方法がある: /dev/ttyS1, ttyS1, S1 などである。 obsolete な文法である "ps t" (自分の端末) や "ps t?" (端末なしで処理) もサポートされているが、 これらの代わりに新しいオプション ("T", "-t" とリスト、 "x", "t" とリスト) を用いるべきである。 BSD の "O" オプションは "-O" (ユーザー定義の出力フォーマット。 いくつかのよく使われるフィールドは定義済) オプションのように動作したり、 あるいはソートの順序指定にも用いることができます。 このオプションにどちらの動作をさせるかは、 ヒューリスティックな手法を用いて決定します。 望みの動作をさせるには、その他のオプション (ソートあるいはフォーマット) を指定しましょう。 ソートに用いる場合、 BSD "O" オプションの文法は O[+|-]k1[,[+|-]k2[,...]] である。「ソートキー」にある短いキーのシーケンスを k1,k2, ... に指定すれば、プロセスリストをマルチレベルでソートできる。 繰り返しているに過ぎない。 `-' はその直後のキーのソート順を逆順にする。 O オプションはコマンド引数の最後に指定しなければならない。 しかしそれに続く引数は後に置くことができる。 GNU のソート文法は --sortX[+|-]key[,[+|-]key[,...]] である。 複数文字のキーは「ソートキー」のセクションから選ぶこと。 X には自分に便利な区切り文字を指定できる。 GNU 教徒の人は `=' を使うと良い。 デフォルトのソートの方向は数値順・辞書順ともに昇順なので、`+' は 実際には省略してよい。例: ps jax --sort=uid,-ppid,+pid この ps は /proc ファイルの仮想ファイルを読み込んで動作する。 この ps は kmem に suid する必要はなく、動作にいかなる特権も必要としない。 この ps に特別な許可属性を与えないようにすること。 WCHAN の表示を正しく行うには、 ps は名前リストファイルにアクセスする 必要がある。正しい出力のたまには、 名前リストファイルは現在の Linux カーネルに 正確に一致するものでなければならない。 WCHAN フィールドを生成するには、 ps は System.map ファイルを読めなければならない。 これは現在動作中のカーネルがコンパイルされたときに作成される。 探索パスは以下の通り:
    $PS_SYSTEM_MAP
    /boot/System.map-`uname -r`
    /boot/System.map
    /lib/modules/`uname -r`/System.map
    /usr/src/linux/System.map
    /System.map
task_struct のメンバー used_math は表示されない。 これは crt0.s が math があるかどうかをチェックするからで、 これによって math フラグが全てのプロセスにセットされてしまうので、 意味がないからである (誰か libc かカーネルを直してください)。 ディスクにスワップアウトされたプログラムのコマンドライン引数は表示されない。 また c オプションが指定されていなければ、括弧に括られて表示される。 %CPU は cputime/realtime のパーセンテージである。 これを全部足しても 100% になることは (よほど幸運でなければ) ない。 これはプロセスが起動されてからの時間で、利用した時間を割ったものである。 SIZE フィールドと RSS フィールドには、 プロセスのページテーブルや task_struct は含まれない。 これらは最低 12k バイト以上あり、必ずメモリに常駐している。 SIZE はプロセスの仮想サイズ (code+data+stack) である。 <defunct> マークがついたプロセスは死んだプロセス (ゾンビ) である。 これらは親プロセスによって正しく消去されていないために残っている。 これらのプロセスは、親プロセスが終了すると init(8) によって消去される。

  プロセスフラグ
ALIGNWARN | 001 | アラインメントに関する警告メッセージを表示する
STARTING | 002 | 生成されつつある
EXITING | 004 | シャットダウンされつつある
PTRACED | 010 | 以前に ptrace (0) が呼び出されている
TRACESYS | 020 | システムコールをトレースしている
FORKNOEXEC | 040 | fork されたが exec されていない
SUPERPRIV | 100 | スーパーユーザー権限を使っている
DUMPCORE | 200 | core をダンプした
SIGNALED | 400 | シグナルによって kill された

  プロセスの状態コード
D | 割り込み不可能なスリープ状態 (通常 IO 中)
R | 実行可能状態 (実行キューにある)
S | スリープ状態
T | トレース中または停止中
Z | 消滅した (ゾンビ) プロセス
BSD 形式で "stat" キーワードが用いられたときは、 以下の添付文字が表示されることがある。
W | 実メモリのページを使っていない
< | 優先度の高いプロセス
N | 優先度の低いプロセス
L | 実メモリのページをロックして利用している (リアルタイム処理やカスタム IO 向け)

  ソートキー
キー | 長い形式 | 説明
c | cmd | 実行ファイルの短い名前
C | cmdline | コマンド行全体
f | flags | フラグ (長い形式の F フィールドの書式)
g | pgrp | プロセスのグループ ID
G | tpgid | 制御端末プロセスグループ ID
j | cutime | 累積したユーザー時間
J | cstime | 累積したシステム時間
k | utime | ユーザー時間
K | stime | システム時間
m | min_flt | マイナーページフォルトの回数
M | maj_flt | メジャーページフォルトの回数
n | cmin_flt | マイナーページフォルトの累積数
N | cmaj_flt | マイナーページフォルトの累積数
o | session | セッション ID
p | pid | プロセス ID
P | ppid | 親プロセスのプロセス ID
r | rss | 常駐セットの大きさ
R | resident | 常駐ページ数
s | size | メモリサイズ (キロバイト単位)
S | share | 占めているページの量
t | tty | tty のマイナーデバイス番号
T | start_time | プロセスが起動した時刻
U | uid | ユーザー ID 番号
u | user | ユーザー名
v | vsize | 仮想メモリの全サイズ (バイト単位)
y | priority | カーネルスケジューリングの優先度

  AIX フォーマット記述子
この ps は AIX のフォーマット記述子をサポートしている。 これは printf(1) や printf(3) の書式コードと似たような動作をする。例えば通常のデフォルト出力は ps -eo "%p %y %x %c" のようにつくることができる。
コード | 通常形式 | ヘッダ
%C | pcpu | %CPU
%G | group | GROUP
%P | ppid | PPID
%U | user | USER
%a | args | COMMAND
%c | comm | COMMAND
%g | rgroup | RGROUP
%n | nice | NI
%p | pid | PID
%r | pgid | PGID
%t | etime | ELAPSED
%u | ruser | RUSER
%x | time | TIME
%y | tty | TTY
%z | vsz | VSZ

  標準フォーマット指定子
これらを用いると出力フォーマットとソート順の両方を指定できる。
例: ps -eo pid,user,args --sort user
CODE | HEADER
%cpu | %CPU
%mem | %MEM
alarm | ALARM
args | COMMAND
blocked | BLOCKED
bsdstart | START
bsdtime | TIME
c | C
caught | CAUGHT
cmd | CMD
comm | COMMAND
command | COMMAND
cputime | TIME
drs | DRS
dsiz | DSIZ
egid | EGID
egroup | EGROUP
eip | EIP
esp | ESP
etime | ELAPSED
euid | EUID
euser | EUSER
f | F
fgid | FGID
fgroup | FGROUP
flag | F
flags | F
fname | COMMAND
fsgid | FSGID
fsgroup | FSGROUP
fsuid | FSUID
fsuser | FSUSER
fuid | FUID
fuser | FUSER
gid | GID
group | GROUP
ignored | IGNORED
intpri | PRI
lim | LIM
longtname | TTY
lstart | STARTED
m_drs | DRS
m_trs | TRS
maj_flt | MAJFL
majflt | MAJFLT
min_flt | MINFL
minflt | MINFLT
ni | NI
nice | NI
nwchan | WCHAN
opri | PRI
pagein | PAGEIN
pcpu | %CPU
pending | PENDING
pgid | PGID
pgrp | PGRP
pid | PID
pmem | %MEM
ppid | PPID
pri | PRI
rgid | RGID
rgroup | RGROUP
rss | RSS
rssize | RSS
rsz | RSZ
ruid | RUID
ruser | RUSER
s | S
sess | SESS
session | SESS
sgi_p | P
sgi_rss | RSS
sgid | SGID
sgroup | SGROUP
sid | SID
sig | PENDING
sig_block | BLOCKED
sig_catch | CATCHED
sig_ignore | IGNORED
sig_pend | SIGNAL
sigcatch | CAUGHT
sigignore | IGNORED
sigmask | BLOCKED
stackp | STACKP
start | STARTED
start_stack | STACKP
start_time | START
stat | STAT
state | S
stime | STIME
suid | SUID
suser | SUSER
svgid | SVGID
svgroup | SVGROUP
svuid | SVUID
svuser | SVUSER
sz | SZ
time | TIME
timeout | TMOUT
tmout | TMOUT
tname | TTY
tpgid | TPGID
trs | TRS
trss | TRSS
tsiz | TSIZ
tt | TT
tty | TT
tty4 | TTY
tty8 | TTY
ucomm | COMMAND
uid | UID |
uid_hack | UID
uname | USER |
user | USER |
vsize | VSZ |
vsz | VSZ |
wchan | WCHAN |

  環境変数
以下の環境変数が ps に影響する:
COLUMNS | デフォルトのディスプレイの幅を変更する
LINES | デフォルトのディスプレイの高さを変更する
PS_PERSONALITY | posix,old,linux,bsd,sun,digital のどれかに設定する
CMD_ENV | posix,old,linux,bsd,sun,digital のどれかに設定する
I_WANT_A_BROKEN_PS | obsolete なコマンドラインの解釈に強制する
LC_TIME | 日付のフォーマット
PS_FORMAT | デフォルトの出力フォーマット指定 override
PS_SYSMAP | 名前リスト (System.map) のデフォルトの場所
PS_SYSTEM_MAP | 名前リスト (System.map) のデフォルトの場所
POSIXLY_CORRECT | よくない「仕様」を無視する際に言い訳をしない
UNIX95 | よくない「仕様」を無視する際に言い訳をしない
_XPG | CMD_ENV=irix の非標準的な振舞いをキャンセルする
一般にはこれらの変数を設定するのはあまり良い考えではない。 ただし、デフォルトの振舞いを設定する CMD_ENV (または PS_PERSONALITY) と Unix98 標準に追従するための POSIXLY_CORRECT (または UNIX95) は例外である。
PS_PERSONALITY | 説明
無し | 「正しいことをする」
aix | AIX の ps のように振舞う
bsd | FreeBSD の ps のように振舞う
compaq | Digital Unix の ps のように振舞う
debian | 古い Debian の ps のように振舞う
digital | Digital Unix の ps のように振舞う
gnu | 古い Debian の ps のように振舞う
hp | HP-UX の ps のように振舞う
hpux | HP-UX の ps のように振舞う
irix | Irix の ps のように振舞う
linux | Unix98 の派生。便宜のためのみに存在する
old | 古い Linux の ps のように振舞う
posix | 標準
sco | SCO の ps のように振舞う
sgi | Irix の ps のように振舞う
sun | SunOS 4 の ps のように振舞う
sunos | SunOS 4 の ps のように振舞う
sysv | 標準
unix | 標準
unix95 | 標準
unix98 | 標準

例
システムの全てのプロセスを見る (標準的な書式):
    ps -e
システムの全てのプロセスを見る (BSD での書式):
    ps ax
(実 ID / 実効 ID が) ルートとして実行されているプロセスを除く、 全てのプロセスを見る:
    ps -U root -u root -N

関連項目
top(1), pstree(1), proc(5)

標準
この ps は Single Unix Specification の第二版に準拠させることができる。

著者
Branko Lankester <lankeste@fwi.uva.nl> が最初に ps を書いた。
Michael K. Johnson <johnsonm@redhat.com> は proc ファイルシステムに対応させるための大幅な書き換えを行った。 プロセス内のいくつかの項目を変更した。
Michael Shields <shields@msrl.com> は pid リスト機能を追加した。
Charles Blake <cblake@bbn.com> は、複数レベルのソート・ dirent 形式のライブラリ・デバイス名−番号間の mmap データベース・ 直接 System.map を二分木的に探索する手法、を追加し、 コードとドキュメントの大幅な整理を行った。
David Mosberger-Tang は psupdate のジェネリックな BFD サポートを書いた。
Albert Cahalan <acahalan@cs.uml.edu> は ps を書き直して Unix98 と BSD への完全な対応を行った。 obsolete な文法や外来の文法に関するあまり美しくないハックも行った。 Michael K. Johnson <johnsonm@redhat.com> が現在のメンテナである。 バグ報告は <procps-bugs@redhat.com> まで送って欲しい。