名 前
getrusage − 資 源 の 使 用 量 を 取 得 す る
書 式
#include
<sys/time.h>
#include <sys/resource.h>
int getrusage(int who, struct rusage *usage);
説 明
getrusage()
は who の 資 源 (resource)
の 使 用 量 を 返
す 。 who に は 以
下 の い ず れ か
一 つ を 指 定 で
き る 。
RUSAGE_SELF 呼 び 出 し た
プ ロ セ ス の 資
源 使 用 量 、 そ
の プ ロ セ ス 内
の 全 ス レ ッ ド
が 使 用 し て い
る 資 源 の 合 計
を 返 す 。
RUSAGE_CHILDREN 呼 び 出 し
た プ ロ セ ス の
子 プ ロ セ ス の
う ち 、 終 了 し
て 待 ち 状 態 に
あ る 全 プ ロ セ
ス が 使 用 し て
い る 資 源 使 用
量 の 統 計 を 返
す 。 こ れ ら の
統 計 情 報 に は
、 孫 プ ロ セ ス
や そ の 子 孫 の
プ ロ セ ス の う
ち 、 削 除 待 ち
の も の が 使 用
し て い る 資 源
も 含 ま れ る 。
RUSAGE_THREAD (Linux 2.6.26 以 降 ) 呼
び 出 し た ス レ
ッ ド に 関 す る
資 源 使 用 量 の
統 計 を 返 す 。
<sys/resource.h> か ら こ
の 定 数 の 定 義
を 得 る た め に
は 、 ((ど の ヘ
ッ ダ ー フ ァ イ
ル を イ ン ク ル
ー ド す る よ り
も 前 に ) 機 能 検
査 マ ク ロ _GNU_SOURCE
を 定 義 し な け
れ ば な ら な い
。 資 源 使 用 量
は usage が 指 す 構
造 体 に 格 納 さ
れ て 返 さ れ る
。 構 造 体 は 以
下 の 形 式 で あ
る 。
struct rusage {
struct timeval ru_utime; /* 使 用 さ
れ た ユ ー ザ ー CPU
時 間 */
struct timeval ru_stime; /* 使 用 さ
れ た シ ス テ ム CPU
時 間 */
long ru_maxrss; /* RAM 上 に 存 在
す る 仮 想 ペ ー
ジ の サ イ ズ
(resident set size) の 最 大 値 */
long ru_ixrss; /* 共 有 メ モ
リ ー の 合 計 サ
イ ズ */
long ru_idrss; /* 非 共 有 デ
ー タ の 合 計 サ
イ ズ */
long ru_isrss; /* 非 共 有 ス
タ ッ ク の 合 計
サ イ ズ */
long ru_minflt; /* ペ ー ジ の
再 利 用 (ソ フ ト
ペ ー ジ フ ォ ル
ト ) */
long ru_majflt; /* ペ ー ジ フ
ォ ー ル ト (ハ ー
ド ペ ー ジ フ ォ
ル ト ) */
long ru_nswap; /* ス ワ ッ プ */
long ru_inblock; /* ブ ロ ッ ク
入 力 操 作 */
long ru_oublock; /* ブ ロ ッ ク
出 力 操 作 */
long ru_msgsnd; /* 送 信 さ れ
た IPC メ ッ セ ー ジ */
long ru_msgrcv; /* 受 信 さ れ
た IPC メ ッ セ ー ジ */
long ru_nsignals; /* 受 信 さ れ
た シ グ ナ ル */
long ru_nvcsw; /* 意 図 し た
コ ン テ キ ス ト
切 り 替 え */
long ru_nivcsw; /* 意 図 し な
い コ ン テ キ ス
ト 切 り 替 え */ }; す
べ て の フ ィ ー
ル ド が サ ポ ー
ト さ れ て い る
わ け で は な い
。 メ ン テ ナ ン
ス さ れ て い な
い フ ィ ー ル ド
に は 、 カ ー ネ
ル が 0 を 設 定 す
る (メ ン テ ナ ン
ス さ れ て い な
い フ ィ ー ル ド
は 、 他 の シ ス
テ ム と の 互 換
性 の た め に 提
供 さ れ て お り
、 い つ か Linux で も
サ ポ ー ト さ れ
る か も し れ な
い )。 各 フ ィ ー
ル ド の 詳 細 は
以 下 の 通 り で
あ る 。
ru_utime ユ
ー ザ ー モ ー ド
で の 実 行 で 消
費 さ れ た 合 計
時 間 。 timeval 構 造
体 (秒 と ミ リ 秒 )
で 表 現 さ れ る
。
ru_stime カ ー ネ ル モ
ー ド で の 実 行
で 消 費 さ れ た
合 計 時 間 。 timeval
構 造 体 (秒 と ミ
リ 秒 ) で 表 現 さ
れ る 。
ru_maxrss (Linux 2.6.32 以 降 ) 使
用 さ れ た resident set size
の 最 大 値 (キ ロ
バ イ ト 単 位 )。
RUSAGE_CHILDREN の 場 合 に
は 、 プ ロ セ ス
ツ リ ー の resident set size
の 最 大 値 で は
な く 、 最 も 大
き い 子 プ ロ セ
ス の resident set size と な
る 。
ru_ixrss (メ ン テ ナ ン
ス さ れ て い な
い ) こ の フ ィ ー
ル ド は 現 在 の
と こ ろ Linux で は 未
使 用 で あ る 。
ru_idrss (メ ン テ ナ ン
ス さ れ て い な
い ) こ の フ ィ ー
ル ド は 現 在 の
と こ ろ Linux で は 未
使 用 で あ る 。
ru_isrss (メ ン テ ナ ン
ス さ れ て い な
い ) こ の フ ィ ー
ル ド は 現 在 の
と こ ろ Linux で は 未
使 用 で あ る 。
ru_minflt
I/O 動 作 な し で 発 生 し た ペ ー ジ フ ォ ル ト の 回 数 。 再 割 り 当 て を 待 っ て い る ペ ー ジ リ ス ト か ら ペ ー ジ フ レ ー ム を 「 回 収 」 (reclaim) す る こ と で 、 I/O 動 作 を 避 け る こ と が で き る 。
ru_majflt
I/O 動 作 を 必 要 と す る ペ ー ジ フ ォ ル ト の 回 数 。
ru_nswap (メ
ン テ ナ ン ス さ
れ て い な い ) こ
の フ ィ ー ル ド
は 現 在 の と こ
ろ Linux で は 未 使 用
で あ る 。
ru_inblock (Linux 2.6.22 以 降 ) フ
ァ イ ル シ ス テ
ム が 入 力 を 実
行 す る 必 要 が
あ っ た 回 数 。
ru_oublock (Linux 2.6.22 以 降 ) フ
ァ イ ル シ ス テ
ム が 出 力 を 実
行 す る 必 要 が
あ っ た 回 数 。
ru_msgsnd (メ ン テ ナ ン
ス さ れ て い な
い ) こ の フ ィ ー
ル ド は 現 在 の
と こ ろ Linux で は 未
使 用 で あ る 。
ru_msgrcv (メ ン テ ナ ン
ス さ れ て い な
い ) こ の フ ィ ー
ル ド は 現 在 の
と こ ろ Linux で は 未
使 用 で あ る 。
ru_nsignals (メ ン テ ナ
ン ス さ れ て い
な い ) こ の フ ィ
ー ル ド は 現 在
の と こ ろ Linux で は
未 使 用 で あ る
。
ru_nvcsw (Linux 2.6 以 降 ) 自
分 の タ イ ム ス
ラ イ ス が 完 了
す る 前 に プ ロ
セ ス が 自 発 的
に プ ロ セ ッ サ
を 解 放 し て 行
わ れ た コ ン テ
キ ス ト ス イ ッ
チ の 回 数 (通 常
は リ ソ ー ス が
利 用 可 能 に な
る の を 待 つ た
め に 行 わ れ る
)。
ru_nivcsw (Linux 2.6 以 降 ) 優
先 度 が 自 分 よ
り 高 い プ ロ セ
ッ サ が 実 行 可
能 に な っ た か
、 現 在 の プ ロ
セ ス が 自 分 の
タ イ ム ス ラ イ
ス を 超 過 し た
こ と に よ り 行
わ れ た コ ン テ
キ ス ト ス イ ッ
チ の 回 数 。
返 り 値
成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。
エ ラ ー
EFAULT |
usage が ア ク セ ス 可 能 な ア ド レ ス 空 間 の 外 を 指 し て い る 。 | ||
EINVAL |
who が 無 効 で あ る 。 |
準 拠
SVr4, 4.3BSD. POSIX.1−2001 は getrusage() を 規 定 し て い る が 、 規 定 し て い る フ ィ ー ル ド は ru_utime と ru_stime だ け で あ る 。
RUSAGE_THREAD は Linux 固 有 で あ る 。
注 意
execve(2) の 前 後 で リ ソ ー ス 使 用 量 の 指 標 は 保 持 さ れ る 。 今 日 で は <sys/time.h> を イ ン ク ル ー ド す る 必 要 は な い が 、 イ ン ク ル ー ド し て お け ば 移 植 性 が 増 す 。 (実 際 struct timeval は <sys/time.h> で 定 義 さ れ て い る 。 )
2.6.9 よ り 前 の バ ー ジ ョ ン の Linux カ ー ネ ル で は 、 SIGCHLD の 処 理 が SIG_IGN に 設 定 さ れ て い る と 、 子 プ ロ セ ス の リ ソ ー ス 使 用 量 が RUSAGE_CHILDREN で 返 さ れ る 値 に 自 動 的 に 含 め ら れ る 。 し か し POSIX.1−2001 で は 、 こ れ を 明 確 に 禁 止 し て い る 。 こ の 準 拠 し て い な か っ た 点 は 、 Linux 2.6.9 以 降 で 改 正 さ れ た 。 こ の ペ ー ジ の 最 初 で 示 し た 構 造 体 の 定 義 は 4.3BSD Reno の も の で あ る 。 古 い シ ス テ ム で は 、 getrusage() と 同 様 の 目 的 を 持 つ 関 数 vtimes() が 提 供 さ れ て い た 。 後 方 互 換 性 の た め 、 glibc で も vtimes() を 提 供 し て い る 。 全 て の 新 し い ア プ リ ケ ー シ ョ ン で は getrusage() を 使 用 す べ き で あ る 。
proc(5) に あ る /proc/PID/stat の 説 明 も 参 照 の こ と 。
関 連 項 目
clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。