PS(1)

名称
ps - プロセスの状態を表示する

書式
[-acCehjKlmrSTuvwx] [-M core] [-N system] [-O fmt] [-o fmt] [-p pid] [-t tty] [-W swap] [-L]

解説
ps は、まずヘッダ行を表示し続いて制御端末を持つ ユーザのプロセスを各一行で表示します。この情報はプロセス ID の順にソートされています。

表示される情報は、キーワードの集合に基づいて選ばれます (-L や -O, -o オプションなどを参照のこと)。デフォルトの出力フォーマットは、 各プロセス毎に、プロセス ID, 制御端末, CPU 時間 (ユーザ時間とシステム時間を 含む), 状態, 関連するコマンド、から構成されています。

オプション:

-a  他のユーザのプロセスに関する情報も表示します。

-c  引数つきのコマンド全体でなはく、実行形ファイルの名前だけを表示します。 これは、例えば全ての sh(1) スクリプトが “sh” と表示されるため、多少混乱するかもしれません。

-C  CPU% を表示する際の計算を、``存在''時間を無視して、``実'' CPU 計算時間を使うようにします (これは通常効果がありません)。

-e  環境 (変数) も一緒に表示します。

-h  ページ毎にヘッダが付くようにします。

-j  以下のキーワードに関する情報を表示します: user, pid, ppid, pgid, sess, jobc, state, tt, time, command

-K  /proc ベースの方法を無効にします。/proc ベースの方法は、通常の kvm を用いた 方法が使えない場合にのみ使用されます。詳細は後述しますので、そちらを参照して ください。

-L  有効なキーワードの集合を表示します。

-l  以下のキーワードに関する情報を表示します: uid, pid, ppid, cpu, pri, nice, vzs, rss, wchan, state, tt, time, command

-M core
    名前に関するリストから値を取り出す際に、デフォルトの /dev/kmem の代りに core を使います。

-m  プロセス ID 順の代りに、メモリの使用量の順に表示をおこないます。

-N system
    名前のリストを取り出す際に、デフォルトの /netbsd の代りに system を使います。

-O fmt
    デフォルトの情報にたいして、空白またはカンマで区切られたキーワード列 fmt に関する情報を、プロセス ID の後に追加して表示します。 各キーワードの後ろに、``='' と文字列を追加すると、付け加えられた 文字列がヘッダ行でそのキーワードの説明として標準のヘッダの代りに 用いられます。

-o fmt
    空白またはカンマで区切られたキーワード列 fmt に関する情報を表示します。 各キーワードの後ろに、``='' と文字列を追加すると、付け加えられた 文字列がヘッダ行でそのキーワードの説明として標準のヘッダの代りに 用いられます。

-p pid
    指定した pid に関する情報を表示します。

-r  プロセス ID の順にソートする代りに、現在の CPU の利用率でソートします。

-S  プロセス時間を、存在している子プロセスの時間も合計して表示するようにします。

-T  標準入力と結び付けられたデバイスを操作しているプロセスに関する 情報を表示します。

-t tty
    指定された tty と結び付けられたデバイスを操作しているプロセスに関する情報を表示します。

-u  以下のキーワードに関する情報を表示します: user, pid, %cpu, %mem, vsz, rss, tt, state, start, time, command. このオプションを指定すると、暗黙のうちに -r も指定したことになります。

-v  以下のキーワードに関する情報を表示します: pid, state, time, sl, re, pagein, vsz, rss, lim, tsiz, %cpu, %mem, command. このオプションを指定すると、暗黙のうちに -m も指定したことになります。

-W swap
    デフォルトの “/dev/drum” の代りに指定した swap から 詳細なスワップ情報を取り出します。

-w  情報を表示する際に、デフォルトでは画面幅しか表示しませんが、この オプションで 132 桁で表示するようにします。 -w をもう一度指定 する (-ww) とすることで、画面幅に関らず、すべての情報を表示します。

-x  制御端末のないプロセスに関する情報も表示します。

もし ps が直接カーネルからプロセス情報を抽出できなかった場合 (たとえば -M や -N オプションが間違っていたり、kvm ベースの方法に失敗した場合)、 現在は実験的に、もし “/proc” ファイルシステムがマウントされていれば、 “/proc” インタフェースには限度があるけれどもこれを使ってできる限りの情報を集めます。 詳細は mount_procfs(8) を参照してください。 ps は、処理の前に “/proc” が procfs ファイルシステムであるかどうか確かめます。 この実験的な代替メカニズムは将来変更される可能性があります。 -K オプションはこの /proc ベースの代替メカニズムを無効にします。

完全なキーワードのリストは、下に示します。いくつかのキーワードに ついては、ここで説明します。

%cpu
    プロセスの CPU 利用率です。これは実時間で 1 分前までの平均の パーセンテージです。計算に使われる時間は同じではない (実行 されたばかりのプロセスなどがあるため) ので、 %CPU の値の合計は 100% を越えることがあります。

%mem
    プロセスの実メモリ使用率です。

flags
    インクルードファイル <sys/proc.h> で定義されているプロセスのフラグです:
    P_ADVLOCK | 0x0000001 | process may hold a POSIX advisory lock
    P_CONTROLT | 0x0000002 | process has a controlling terminal
    P_INMEM | 0x0000004 | process is loaded into memory
    P_NOCLDSTOP | 0x0000008 | no
    SIGCHLD when children stop
    P_PPWAIT | 0x0000010 | parent is waiting for child to exec/exit
    P_PROFIL | 0x0000020 | process has started profiling
    P_SELECT | 0x0000040 | selecting; wakeup/waiting danger
    P_SINTR | 0x0000080 | sleep is interruptible
    P_SUGID | 0x0000100 | process had set id privileges since last exec
    P_SYSTEM | 0x0000200 | system process: no sigs, stats or swapping
    P_TIMEOUT | 0x0000400 | timing out during sleep
    P_TRACED | 0x0000800 | process is being traced
    P_WAITED | 0x0001000 | debugging process has waited for child
    P_WEXIT | 0x0002000 | working on exiting
    P_EXEC | 0x0004000 | process called
    execve(2)
    P_OWEUPC | 0x0008000 | owe process an addupc() call at next ast
    P_FSTRACE | 0x0010000 | tracing via file system
    P_SSTEP | 0x0020000 | process needs single-step fixup

lim setrlimit(2) によって指定されているメモリを使用する上での制限です。

lstart
    コマンドが実行を始めた正確な時間です。 strftime(3) の ``%C'' フォーマットを用いています。

nice
    プロセスのスケジューリングの優先度です。 (setpriority(2) 参照)

rss 実行しているプロセスの実メモリに残っているサイズです (1024 バイト単位)。

start
    コマンドが実行を始めた時間です。スタート時間が 24 時間以内ならば、 スタート時間は、 strftime(3) で記述されているフォーマットで ``%l:%M%p'' として表示されます。 コマンドが 7 日以内に起動されたものである場合は、 スタート時間は ``%a%p'' というフォーマットで表示されます。 それ以外の場合は、``%e%b%y'' で表示されます。

state
    プロセスの状態を、文字で表示します。1 文字目が基本の状態で、 それに続く文字は追加の情報です。 例えば、 “RWNA” は最初の文字がそのプロセスは run 状態にあることを示しています。

    D   ディスク中にあり、wait 状態である (もしくは短期間割り込み不可能な)。
    I   idle 状態である (20 秒以上 sleep している)。
    R   run 状態である。
    S   sleep している (20 秒以下) である。
    T   stop状態である。
    Z   すでに消滅したプロセスである (``zonbie'')。

    以上の文字に加えて、追加の状態文字があります。

    +   プロセスが、その制御端末のなかでフォアグラウンドの プロセスグループである。
    <   CPU のスケジュール優先度が上げられている。
    >   メモリの利用制限が行われており、現在その制限を越えている。 プロセスはスワップされていません。
    A   プロセスがランダムなページ置換を要求している (madvise(2) の VA_ANOM 、例えばガベージコレクションに入っている LISP インタプリタ)。
    E   プロセスが終了しようとしている。
    L   プロセスは、実メモリ中にロックされたページを持っている (例えば、raw I/O など)。
    N   CPU のスケジュール優先度が下げられている (setpriority(2) 参照)
    S   プロセスが FIFO ページ置換を要求している (madvise(2) の VA_SEQL 、例えば、大きな画像処理プログラムで 仮想メモリを順番に使うことがわかっているものなど)
    s   プロセスは、セッションリーダーである。
    V   プロセスは vfork(2) の間、一時中断 (suspend) されている。
    W   プロセスはスワップアウトされている。
    X   プロセスはトレースされていたり、デバッグされていたりする。

tt  制御端末のパス名の省略です。省略は、 “/dev/tty” の後に続く 2 文字が使われ、console の場合には、``co'' という文字が 使われます。制御端末がない場合には、``-'' が使われます。

wchan
    プロセスは、イベント (システム中のアドレス) を待っています。 数字で表示されている時は、そのアドレスの最初の部分は削られて、 その結果が 16 進数で表示されます。例えば、0x80324000 は、324000 と表示されます。

キーワード command を使って表示を行う時、プロセスがすでに終了して いるが、親プロセスはまだ存在しており、表示しようとしているプロセスを wait していない場合 (つまり一般にゾンビといわれる状態)、コマンド部分に は、``<defunct>'' と表示されます。また、プロセスが終了する際にブロック されている場合は、``<exiting>'' と表示されます。 ps は、コマンド名や引数を、プロセスが作られたメモリやスワップ領域を調べて、 コマンド名を推測します。この方法は、どうしても信頼性があるものではなく、 プロセスは、何らかのイベントによってこの情報 (コマンド名) を破棄することが できます。そのため、command 名はまったくあてになりません。 しかし、キーワード ucomm (アカウンティング名) なら大丈夫です。

キーワード
以下は、キーワードの完全なリストと、その意味です。幾つかのものは 単なる別名のこともあります。

%cpu
    CPU 使用率 (別名 pcpu)
%mem
    メモリ使用率 (別名 pmem)
acflag
    アカウンティングフラグ (別名 acflg)
command
    コマンド名と引き数
cpu 短期間の CPU 使用要因 (スケジューリング用)
flags
    プロセスのフラグ: 16 進数 (別名 f)
inblk
    総ブロックリード数 (別名inblock)
jobc
    ジョブコントロール数
holdcnt
    プロセスのホールド数 (もし 0 でない場合は、プロセスはスワップしていない)
ktrace
    トレースが行われているかどうか
ktracep
    vnode のトレースが行われているかどうか
lim メモリの利用制限があるかどうか
logname
    プロセスを実行したユーザのログイン名
lstart
    プロセスの開始時間
majflt
    総ページフォルト数
minflt
    総ページ要求数
msgrcv
    総受信メッセージ数 (パイプやソケットから読んだもの)
msgsnd
    総送信メッセージ数 (パイプやソケットに書き込んだもの)
nice
    プロセスの優先度:nice値 (別名 ni)
nivcsw
    総強制コンテキストスイッチ数
nsigs
    総発生シグナル数 (別名 nsignals)
nswap
    総スワップイン/アウト数
nvcsw
    総自発的コンテキストスイッチ数
nwchan
    ウェイトチャネル (アドレスで表示)
oublk
    総書き込みブロック数 (別名 oublock)
p_ru
    リソース使用量 (zombie に対してのみ有効)
paddr
    スワップアドレス
pagein
    ページイン数 (majflt と同じ)
pgid
    プロセスグループ番号
pid プロセス ID 番号
poip
    進行中のページアウト数
ppid
    親プロセス ID 番号
pri スケジューリングの優先順位
re  実メモリに存在している時間 (単位: 秒; 127 は無限)
rgid
    実グループ ID 番号
rlink
    run キューのリバースリンク、さもなければ 0
rss 実メモリ (常駐セット) サイズ
rsz 実メモリ (常駐セット) サイズ + (プログラムテキストサイズ / テキスト使用回数) (別名 rs-size)
ruid
    実ユーザID番号
ruser
    ユーザ名 (ruid から取得したもの)
sess
    セッションポインタ
sig 延期されたシグナル (別名 pending)
sigcatch
    キャッチしたシグナル (別名 caught)
sigignore
    無視されたシグナル (別名 ignored)
sigmask
    ブロックされたシグナル (別名 blocked)
sl  スリープしている時間 (単位: 秒; 127 は無限)
start
    プロセスの開始時間
state
    プロセスの状態をシンボル (文字) で表す
svgid
    セットグループ ID 実行プログラムが保存しているグループ ID
svuid
    セットユーザ ID 実行プログラムが保存しているユーザ ID
tdev
    端末制御デバイス番号
time
    CPU 時間 + ユーザ時間 + システム時間の合計 (別名 cputime)
tpgid
    端末制御プロセスグループ ID
tsess
    端末制御セッションポインタ
tsiz
    テキストイメージサイズ (Kbyte 単位)
tt  制御端末名 (2 文字の省略名)
tty 制御端末の完全な名前
ucomm
    アカウンティングに使われる名前
uid 実行ユーザ ID
upr システムコールから戻ってくる際のスケジューリング優先順位 (別名 usrpri)
user
    ユーザ名 (ユーザ ID から取得される)
vsz プロセスの仮想サイズ:単位 Kbyte (別名 vsize)
wchan
    ウェイトチャネル (シンボル名で表示される)
xstat
    終了時または stop 時の状態 (stop プロセスか zombie プロセスにのみ有効)

関連ファイル
/dev
    スペシャルファイルやデバイスの名前
/dev/drum
    デフォルトのスワップデバイスの名前
/dev/kmem
    デフォルトのカーネルメモリファイル
/var/run/dev.db
    /dev 名前データベース
/var/db/kvm_netbsd.db
    システムの内部名データベース
/netbsd
    デフォルトのシステム名
/proc
    プロセス情報を得るためのファイルシステム

関連項目
kill(1), sh(1), w(1), kvm(3), strftime(3), mount_procfs(8), pstat(8)

バグ
ps は、システムより速く実行されることはなく、他のプロセスと同様に スケジュールされて実行されるので、表示される情報は、決して正確ではありません。