!!linux の /proc の備忘録 FreeBSD の場合には fstab に次の行を追加するか proc /proc procfs rw,noauto 0 0 もしくは mount /proc を実行 !/proc/[pid]/stat kernel 2.6 は (44) ?? プロセスの状態についての情報。 これは ps(1) で使われ、 カーネルのソースファイル fs/proc/array.c で定義されている。 各フィールドを順番に、 scanf(3) のフォーマット指定子付きで以下に示す。 (1) pid %d プロセス ID。 (2) comm %s 括弧でくくられた実行形式のファイル名。 実行形式がスワップアウトされているかどうかによらず、 見ることができる。 (3) state %c プロセスの状態を示す、以下のいずれか 1 文字。 R 実行中 (Running) S Sleeping in an interruptible wait D Waiting in uninterruptible disk sleep Z ゾンビ (Zombie) T (シグナルでの) 停止、または (Linux 2.6.33 より前では) トレースによる停止 t トレースによる停止 (Tracing stop) (Linux 2.6.33 以降) W ページング中 (Linux 2.6.0 より前のみ) X 死亡 (Dead) (Linux 2.6.0 以降) x 死亡 (Dead) (Linux 2.6.33 から 3.13 までのみ) K Wakekill (Linux 2.6.33 から 3.13 までのみ) W Waking (Linux 2.6.33 から 3.13 までのみ) P Parked (Linux 3.9 から 3.13 までのみ) (4) ppid %d このプロセスの親プロセスの PID。 (5) pgrp %d プロセスのプロセスグループ ID。 (6) session %d プロセスのセッション ID。 (7) tty_nr %d プロセスの制御端末 (マイナーデバイス番号はビット 31〜20 と 7〜0 にまたがって格納され、 メ ジャーデバイス番号はビット 15〜8 に格納される)。 (8) tpgid %d プロセスの制御端末のフォアグランド・プロセスグループの ID。 (9) flags %u プロセスのカーネルフラグワード。 ビットの意味は、 で定義されている PF_* を参 照すること。 詳細はカーネルのバージョンに依存する。 このフィールドのフォーマットは Linux 2.6 より前では %lu であった。 (10) minflt %lu プロセスが引き起こしたマイナーフォールト (minor fault、ディスクから メモリーページへのロード を必要としないフォールト) の回数。 (11) cminflt %lu (そのプロセスが終了を待っている) 子プロセスが引き起こしたマイナーフォールトの回数。 (12) majflt %lu プロセスが引き起こしたメジャーフォールト (major fault、ディスクからメモリーページへのロード を必要とするフォールト) の回数。 (13) cmajflt %lu (そのプロセスが終了を待っている) 子プロセスが引き起こしたメジャーフォールトの回数。 (14) utime %lu このプロセスがユーザーモードでスケジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。 この値にはゲスト時間 guest_time (仮想 CPU の 実行に消費された時間) も含まれる。これは、ゲスト時間のフィールドを認識しないアプリケーション において、ゲスト時間分を計算に入れ損ねないようにするためである。 (15) stime %lu プロセスのカーネルモードでの実行時間 (単位 jiffies)。 このプロセスがカーネルモードでスケ ジューリングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値 が表示される)。 (16) cutime %ld このプロセスの子プロセスで、終了待ち (waited-for) のプロセスが、 ユーザーモードでスケジュー リングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示 される)。 (times(2) も参照すること。) この値にはゲスト時間 cguest_time (仮想 CPU を実行する のに消費した時間、下記参照) も含まれる。 (17) cstime %ld このプロセスの子プロセスで、終了待ち (waited-for) のプロセスが、カーネルモードでスケジューリ ングされた時間の合計。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割った値が表示さ れる)。 (18) priority %ld (Linux 2.6 の場合の説明) リアルタイムスケジューリングポリシー (下記の policy ; sched_setscheduler(2) 参照) で動作しているプロセスでは、 この 値はスケジューリング優先度を反転した値 (スケジューリング優先度を マイナスにし た値) となる。値は -2 から -100 までの範囲の数値で、 それぞれリアルタイム優先 度の 1 から 99 に対応する。 リアルタイム以外のスケジューリングポリシーで動作し ているプロセスでは、 この値はカーネル内で管理されている nice 値そのもの(setpriority(2)) となる。 カーネルは nice 値を 0 (高) から 39 (低) の範囲 の値として保持しteおり、 それぞれユーザーに見える nice 値の -20 から 19 に対応 する。 Linux 2.6 より前では、このプロセスに割り当てられたスケジューリング 重みを変換した値が表示されていた。 (19) nice %ld nice 値 (setpriority(2) 参照)。 19 (最低優先) から -20 (最高優先) の範囲の値である。 (20) num_threads %ld このプロセスのスレッド数 (Linux 2.6 以降)。 カーネル 2.6 より前では、このフィールドは削除さ れたフィールドの 場所埋めとして 0 にハードコードされていた。 (21) itrealvalue %ld インターバルタイマーによって、次に SIGALRM がプロセスへ送られるまでの時間 (単位 jiffies)。 カーネル 2.6.17 以降では、このフィールドはメンテナンスされなくなり、 0 にハードコードされて いる。 (22) starttime %llu プロセスの起動時刻。システムが起動した時刻が起点である。 Linux 2.6 より前のカーネルでは、 こ の値の単位は jiffies であった。 Linux 2.6 以降では、 値の単位はクロック tick である (sysconf(_SC_CLK_TCK) で割った値となる)。 このフィールドのフォーマットは Linux 2.6 より前では %lu であった。 (23) vsize %lu 仮想メモリーのサイズ。単位はバイト。 (24) rss %ld Resident Set Size。プロセスが持っている実メモリー上のページ数。 これはちょうどテキスト、デー タ、スタック空間に使われているページ数である。 デマンドロードされていないページや スワップア ウトされたページの数は含んでいない。 (25) rsslim %lu このプロセスの rss の現在のソフトリミット (バイト単位)。 getrlimit(2) の RLIMIT_RSS の説明を 参照。 (26) startcode %lu プログラムテキストが実行可能であるような領域の先頭アドレス。 (27) endcode %lu プログラムテキストが実行可能であるような領域の末尾アドレス。 (28) startstack %lu スタックの開始アドレス (すなわち、スタックの底)。 (29) kstkesp %lu 現在の ESP (スタックポインター) の値。 プロセスのカーネルスタックページにある。 (30) kstkeip %lu 現在の EIP (インストラクションポインター) の値。 (31) signal %lu 処理待ちのシグナルのビットマップ。 10 進数で表示される。このフィールドは廃止予定である。リア ルタイムシグナルに関する情報は表示されないからである。代わりに /proc/[pid]/status を使うこと。 (32) blocked %lu ブロックされた (blocked) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止 予定である。 リアルタイムシグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。 (33) sigignore %lu 無視された (ignored) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定 である。 リアルタイムシグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。 (34) sigcatch %lu 捕捉された (caught) シグナルのビットマップ。 10 進数で表示される。 このフィールドは廃止予定 である。 リアルタイムシグナルに関する情報は表示されないからである。 代わりに /proc/[pid]/status を使うこと。 (35) wchan %lu This is the "channel" in which the process is waiting. It is the address of a location in the kernel where the process is sleeping. The corresponding symbolic name can be found in /proc/[pid]/wchan. (36) nswap %lu スワップされたページ数 (メンテナンスされていない)。 (37) cnswap %lu 子プロセスの nswap の累計 (メンテナンスされていない)。 (38) exit_signal %d (Linux 2.1.22 以降) プロセスが死んだときに親プロセスに送られるシグナル。 (39) processor %d (Linux 2.2.8 以降) このプロセスを最後に実行した CPU の番号。 (40) rt_priority %u (Linux 2.5.19 以降) リアルタイムスケジューリングの優先度。 リアルタイムポリシーの元でスケジューリングされるプロ セスでは 1 から 99 の範囲の値となり、 リアルタイム以外のスケジューリングポリシーのプロセスで は 0 となる (sched_setscheduler(2) 参照)。 (41) policy %u (Linux 2.5.19 以降) スケジューリングポリシー (sched_setscheduler(2) 参照)。 値は、 linux/sched.h の SCHED_* 定 数を使ってデコードすればよい。 このフィールドのフォーマットは Linux 2.6.22 より前は %lu であった。 (42) delayacct_blkio_ticks %llu (Linux 2.6.18 以降) (clock tick (100分の1秒) 単位での) ブロック I/O の総遅延量。 (43) guest_time %lu (Linux 2.6.24 以降) プロセスのゲスト時間 (ゲスト OS の仮想 CPU を実行するのに消費された時間)。 clock tick 単位で 計測される (sysconf(_SC_CLK_TCK) で割った値が表示される)。 (44) cguest_time %ld (Linux 2.6.24 以降) プロセスの子プロセスのゲスト時間。 clock tick 単位で計測される (sysconf(_SC_CLK_TCK) で割っ た値が表示される)。 (45) start_data %lu (Linux 3.3 以降) Address above which program initialized and uninitialized (BSS) data are placed. (46) end_data %lu (Linux 3.3 以降) Address below which program initialized and uninitialized (BSS) data are placed. (47) start_brk %lu (Linux 3.3 以降) Address above which program heap can be expanded with brk(2). (48) arg_start %lu (Linux 3.5 以降) プログラムのコマンドライン引き数 (argv) が置かれる開始アドレス。 (49) arg_end %lu (Linux 3.5 以降) プログラムのコマンドライン引き数 (argv) が置かれる終了アドレス。 (51) env_end %lu (Linux 3.5 以降) プログラムの環境 (environment) が置かれる終了アドレス。 (52) exit_code %d (Linux 3.5 以降) waitpid(2) が報告する形式のスレッドの終了ステータス。 !/proc/[pid]/statm (ページ単位で計測した) メモリー使用量についての情報を提供する。 各列は以下の通りである。 size プログラムサイズの総計 (/proc/[pid]/status の VmSize と同じ) resident 実メモリー上に存在するページ (/proc/[pid]/status の VmRSS と同じ) share 共有ページ (ファイルと関連付けられているページ) text テキスト (コード) lib ライブラリ (Linux 2.6 では未使用) data データ + スタック dt ダーティページ (Linux 2.6 では未使用)