Manpages

名 前

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_utimeru_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/ に 書 か れ て い る 。