PS(1)

名称
ps - プロセスの状態の報告

書式
ps [-] [lujsvmaxScewhrnu] [txx] [O[+|-]k1[[+|-]k2...]] [pids] 他に「長い」オプションが3つ: --sortX[+|-]key[,[+|-]key[,...]] --help --version ほかの「長い」オプションは作成中…

説明
ps プロセスの現在の状態を表示する。もし、常にプロセスの最新の状態 を知りたいのなら、 top を使いなさい。 このマニュアルは /procのデータを表示する ps 用である、少なくともそのつもり。

オプション
ps コマンドのこのバージョンのコマンドラインオプションは BSD バージョンの ps 由来であり、System V バージョンのそれとは異なる。 コマンドラインの引数は`-'で始めるべきではない。なぜなら将来、 `-'をUnix98 標準のコマンドライン引数を示すために使う予定があるからだ。 その場合、 `-'がなければコマンドライン引数として現在の「拡張BSD」スタ イルを使うことを示す。 現在、ps コマンドは`-'を「短いオプション」として使うと警告を出すが、 今はまだ有効である。BSD スタイルの引数を使ったシェルスクリプトがあれば 警告に注意しこれを直すか、そうしなければ、そのスクリプトは将来うまく動 かない場合もあるだろう。 他にもGNU形式の「長いオプション名」で指定するオプションもある; 詳細に ついては後述。
l   詳細を表示
u   ユーザ形式: ユーザ名と開始時刻を表示
j   ジョブ形式: pgid と sid
s   シグナル形式
v   vm 形式
m   メモリ状態の表示 (フラグ p を一緒に使うと、ページ数で表示される)。
f   実行命令の親子関係をツリー状に表示。
a   自分以外のユーザのプロセスについても表示
x   制御端末のないプロセスの情報も表示します。
S   子プロセスcpu時間とページフォールトを合計して表示
c   task_structの中の実行ファイル名だけを表示
e   実行命令 + の後ろに環境を表示
w   出力の一行あたりの幅を広げる: 一行に収めるために、実行命令の 端を切ることはしない。正確には、w が一つ加われば、出力のためにさらに一行分 使うことが出来るということ。表示の時は、必要な行数で済ませる。 w は、最大100個まで使用可能
h   ヘッダなし
r   実行中のプロセスだけ表示
n   USER と WCHAN に関して数字で表示。

txx tty xx を制御するプロセスのみ; xx については、"/dev" の下にある デバイスファイル名、あるいは、 tty または cu を省略したものを使用すること。 どの形式を選択しても構わない。ps を実行すると、TTY フィールドに は 省略されたtty名が表示されるだけである。 例えば、 ps t1.

O[+|-]k1[,[+|-]k2[,...]]
    SORT KEYS, k1, k2, ... による、複数の short キーワードによって指定された順にソートしてプロセス状態を表 示する。 何も指定のない場合でも、ps のオプションに応じて、ソートする。 ただし、ユーザーが指定したソートのキーワードが優先される。`+' はキーワー ドの順序付け通りにソートするように指定するものなので、付けなくてもよい。 `-' を指定すると、その後ろにあるキーワードと逆の順序付けになるようにソー トする。t や pids と同様に、コマンド引数内で、オプション O は、 オプションの中では最後に置かれなければいけないが、後に別の引数を続ける こともできる。

pids
    コンマで区切られた形で指定されたプロセスのみ表示する。プロセスのリスト は、コマンド引数の最後のオプションのすぐ後ろに置かれなくてはならない。 なお、間にスペースを入れてはいけない。例えば、 ps j1,4,5 というように記述する。 後の引数に書かれたリストは、連続的に並べられる。例えば、 ps l 1,2 3,4 5 6 1 から 6 までのプロセスすべての内容を詳しく表示する。 もし、pid が指定されているなら、そのpidは必ず表示される。tty が指定され ているなら、それによって制御されるプロセスを必ず表示する。この二つは、 フラグ 'a' と 'x' より優先される。

長いオプション
以下のオプションは、ハイフン(-)を二個続けたあとに記述する。

--sortX[+|-]key[,[+|-]key[,...]]
    表示するプロセスをソートするために、SORT KEYS から、複数のキー ワード を選択する。X には、区切りに使える文字が入る。GNU らし くしたいなら、`=' を使えばよい。表示する順序は、数字の順序あるいは文字 の辞書式順序なので、`+' はなくてもよい。例えば、 ps jax --sort=uid,-ppid,+pid

--help
    使用法と、順序付けのキーワードのリストを集めたヘルプメッセージを表示す る。このリストは、このマニュアルに掲載されているものよりも更新されてい るかもしれない。

--version
    このプログラムの元のソースパッケージとそのバージョンを表示する。

SORT KEYS(順序付けキーワード)
順序付けで使われる変数は、ps で使われる内部変数であり、ある出力 形式で用いられる「加工された」変数は使われない。 もし、「加工された」変数に関する特別な比較関数を書くために志願してくれる人 がいるならば… ;-) SHORT LONG DESCRIPTION
c       cmd             実行可能ファイル名の単純形
C       cmdline         コマンドライン全体
f       flags           「詳しい表示」の F の項のフラグ
g       pgrp            プロセスグループID
G       tpgid           ttyを制御するプロセスグループ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            メモリサイズ(kByte 単位)
S       share           共有ベージの総量
t       tty             tty のマイナーデバイス番号
T       start_time      プロセス開始時刻
U       uid             ユーザ ID ナンバー
u       user            ユーザ名
v       vsize           仮想記憶サイズ(Byte 単位)
y       priority        カーネルスケジューリングの優先順位

フィールド記述

PRI これは、task_structのカウンターフィールドのこと。これは、 HZ 単位のそのプロセスに可能な時間断片(timeslice)である。

NI  標準unix nice 値;正の値ならより少ない cpu 時間を割り当てられる。

SIZE
    仮想イメージの大きさ; textとdataとstack の合計の大きさ。

RSS 常駐セットの大きさ; メモリ中のプログラムの大きさをkByte単位で。

WCHAN
    プロセスが休眠状態の時のカーネル関数名( `sys_' は省略)。 /etc/psdatabase が無い場合には、代わりに16進数が表示。

STAT
    プロセス状態に関する情報。最初のフィールドは、 R は、実行中(running)を意味。 S は、休眠中(sleeping)を意味。 D は、割り込み不可能な休眠中を意味。 T は、停止中かトレース中を意味。 Z は、ゾンビプロセスを意味。 第二フィールドは、 W なら、プロセスは、常駐ページがないことを意味。第三フィールドは、 N プロセスが正のナイス値 (NI field) を持つことを意味。

TT  制御している tty。

PAGEIN
    メジャーページフォールトの数 (ページ内容がディスク/バッファー キャッシュから読まれるページフォルトのこと)。

TRS テキスト常駐の大きさ。

SWAP
    スワップ上の大きさ kByte 単位( -p が指定された場合はページ単位)

SHARE
    共有メモリ。

更新
この procに基づいた ps は、 /proc にマウントされた proc ファイルシステム中のファイル内容を表示している。 この ps は、 kmem に suid する必要も、実行するのに特権も必要ない。 この ps には、いかなる特別な許可も与えちゃいけない。

WCHAN フィールドから意味のある情報を得るためには、 /sbin/psupdate を走らせることで、ファイル /etc/psupdate を更新する必要がある。 これは、新しいカーネルをコンパイルする度に行なう必要がある。 "/dev" ディレクトリの tty デバイスを変更した場合にも 少なくとも一回は root で ps を実行する必要がある。 procps-1.00 の場合、ps/top は、System.map が存在すれば、そこから直接読 み込む。カーネルのアドレスとシンボルの対応表のパスの検索の順序は:
            $PS_SYSTEM_MAP
            /boot/System.map-`uname -r`
            /boot/System.map
            /lib/modules/`uname -r`/System.map
            /etc/psdatabase
            /boot/psdatabase-`uname -r`
            /boot/psdatabase,
            /lib/modules/`uname -r`/psdatabase

注意
task_struct のメンバー used_math は表示されない。なぜなら、 math が存在するなら、 crt0.s は、チェックするためにそちらの方を参照するからである。これによっ て、フラッグmathがすべてのプロセスに設定されるので、(used_mathを)表示 する意味はないのである。

ディスクにスワップアウトされたプログラムはコマンドライン引数なし で表示され、 c オプションが指定されてなければ、括弧でくくられた形で表示される。

%CPU は、cputime と realtimeの比率のパーセンテージを表示する。よほどついて なければ、総計が 100% になることはないだろう。これは、実際に使用された 時間を、プロセスが実行された時間で割ったものである。

SIZE と RSS という二つのフィールドは、プロセスのページテーブルと task_struct をカウントしない; そのようなプロセスを常駐させるために少なく とも12kのメモリが消費される。 SIZE とはプロセスの仮想サイズ(code+data+stack)である。

指定されたデバイスナンバーから名前への変換をするために、ps は、 ファイル "/etc/psdevtab"を維持する(このファイルは"/dev" が新しくなり、 そして パーミッションによって更新が許可される時にはいつでも、更 新される)。もし更新が許可されなかった場合、 ps を実行する度に、ディレクトリ"/dev"の以下にあるファイルを stat(2) しなければいけない。"/dev" によってシステム状況がしばしば変化す るなら、root で、ps を随時走らる必要がある。;-) 私は、 大衆の要望にのっとり、$HOME の下に、バックアップファイルを置ける ようにした。

著者
ps はもともと、Branko Lankester <lankeste@fwi.uva.nl> Michael K によって作られた。 Johnson <johnsonm@sunsite.unc.edu> によって、proc ファイルシステムを使うように 書き換えられた。その際、プロセスについて若干変更した。Michael Shields <mjshield@nyx.cs.du.edu> によって、 pid-list の機能が付け加えられた。 Charles Blake<cblake@bbn.com> によって、様々な特質によるプロセスの表示順序 付けができるようになった。また、dirent-style なライブラリや、デバイス名を 数字に変換するデータベースも追加された。 また、System.map 上のほぼ正確な二分木探索が可能になり、コードやドキュ メント類が洗練された。 David Mossberger-Tang が psupdate に一般的なBFDサポートを書いた。 Michael K. Johnson <johnsonm@redhat.com> が現在メインテナンスしている。