Manpages

名 前

times − プ ロ セ ス 時 間 を 取 得 す る

書 式

#include <sys/times.h>

clock_t times(struct tms *buf);

説 明

times() は 現 在 の プ ロ セ ス 時 間 を buf が 指 し て い る struct tms に 格 納 す る 。 struct tms<sys/times.h> で 以 下 の よ う に 定 義 さ れ て い る :

struct tms {
clock_t tms_utime; /* user time */
clock_t tms_stime; /* system time */
clock_t tms_cutime; /* user time of children */
clock_t tms_cstime; /* system time of children */ };

tms_utime フ ィ ー ル ド は 、 呼 び 出 し た プ ロ セ ス が 命 令 を 実 行 す る の に 消 費 し た CPU 時 間 で あ る 。 tms_stime フ ィ ー ル ド は 、 呼 び 出 し た プ ロ セ ス の た め に 実 行 さ れ た タ ス ク で 、 シ ス テ ム が 消 費 し た CPU 時 間 で あ る 。 tms_cutime フ ィ ー ル ド は 、 終 了 を 待 っ て い る 全 て の 子 プ ロ セ ス の tms_utimetms_cutime の 合 計 で あ る 。 tms_cstime フ ィ ー ル ド は 、 終 了 を 待 っ て い る 全 て の 子 プ ロ セ ス の tms_stimetms_cstime の 合 計 で あ る 。 終 了 す る 子 (及 び そ の 子 孫 )プ ロ セ ス の 時 間 は wait(2)waitpid(2) が プ ロ セ ス ID を 返 し た 瞬 間 に 加 算 さ れ る 。 つ ま り 、 子 が ま だ 終 了 を 待 っ て い な い 状 態 で は 孫 プ ロ セ ス の 時 間 は 決 し て 現 れ な い 。 全 て の 時 間 は ク ロ ッ ク 数 で 返 さ れ る 。

返 り 値

times() は 過 去 の あ る 時 点 か ら 経 過 し た ク ロ ッ ク 数 (clock tick) を 返 す 。 こ の 返 り 値 は clock_t 型 が 取 り 得 る 範 囲 か ら オ ー バ ー フ ロ ー す る か も し れ な い 。 エ ラ ー の 場 合 、 (clock_t) −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EFAULT

tms が プ ロ セ ス の ア ド レ ス 空 間 の 外 を 指 し て い る 。

準 拠

SVr4, 4.3BSD, POSIX.1−2001.

注 意

一 秒 あ た り の ク ロ ッ ク 数 は 以 下 で 得 る こ と が で き る 。

sysconf(_SC_CLK_TCK);

POSIX.1−1996 で は 、 CLK_TCK シ ン ボ ル (<time.h> で 定 義 さ れ て い る ) は 古 い も の で あ る と 記 述 さ れ て い る 。 今 で は こ れ は 古 い も の で あ る 。

Linux 2.6.9 よ り 前 の バ ー ジ ョ ン で は 、 SIGCHLDSIG_IGN に 設 定 す る と 終 了 し た 子 プ ロ セ ス の 回 数 は 自 動 的 に tms_cstimetms_cutime フ ィ ー ル ド に 含 ま れ る 。 し か し 、 POSIX.1−2001 で は 、 こ の 動 作 は 呼 び 出 し 元 が wait(2) 関 数 群 で 子 プ ロ セ ス を 待 っ た 場 合 に の み 起 き る べ き だ と し て い る 。 標 準 と は 異 な る こ の 動 作 は Linux 2.6.9 以 降 で 修 正 さ れ て い る 。

Linux で は 、 buf 引 数 に NULL を 指 定 す る こ と が で き 、 そ の 場 合 は times() は 単 に 関 数 の 結 果 を 返 す 。 し か し 、 POSIX は こ の 振 る 舞 い は 規 定 さ れ て お ら ず 、 そ の 他 の ほ と ん ど の UNIX 実 装 は buf の 値 と し て 非 NULL の 値 を 要 求 す る 。

clock(3)clock_t 型 の 値 を 返 す が 、 こ の 値 は times() で 使 用 さ れ る ク ロ ッ ク tick 数 で は な く 、 CLOCKS_PER_SEC が 単 位 で あ る 点 に 注 意 す る こ と 。

Linux で は 、 times() の 返 り 値 を 計 算 す る 起 点 と な る 「 過 去 の 任 意 の 時 点 」 は 、 カ ー ネ ル の バ ー ジ ョ ン に よ り 異 な る 。 Linux 2.4 以 前 で は 、 こ の 時 点 は シ ス テ ム が 起 動 し た 瞬 間 で あ る 。 Linux 2.6 以 降 で は 、 こ の 時 点 は シ ス テ ム 起 動 時 刻 の (2^32/HZ) − 300 (お よ び 4億 2900万 ) 秒 前 で あ る 。 こ の よ う に カ ー ネ ル バ ー ジ ョ ン (や UNIX の 実 装 ) に よ り 異 な る こ と と 、 返 り 値 が clock_t の 範 囲 を オ ー バ ー フ ロ ー す る 可 能 性 が あ る と い う 事 実 を 考 慮 す る と 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は こ の 値 を 使 う の は 避 け る の が 賢 明 で あ ろ う 。 経 過 時 間 を 測 り た い 場 合 に は 、 代 わ り に clock_gettime(2) を 使 用 す る こ と 。 歴 史
SVr1−3 で は long を 返 し 、 構 造 体 の メ ン バ に time_t 型 を 使 っ て い た が 、 紀 元 か ら の 秒 数 で は な く ク ロ ッ ク 数 を 格 納 し て い た 。 V7 で は 構 造 体 の メ ン バ に long 型 を 使 っ て い た 。 ま だ time_t 型 が な か っ た か ら で あ る 。

バ グ

い く つ か の ア ー キ テ ク チ ャ ー (特 に i386) に お け る Linux の シ ス テ ム コ ー ル の 慣 習 の 制 限 に よ り 、 Linux 2.6 で は 起 動 直 後 は (41秒 と ) タ イ ム ウ ィ ン ド ウ が 小 さ く 、 times() が エ ラ ー が 起 こ っ た こ と を 示 す −1 を 間 違 っ て 返 す こ と が あ る 。 返 り 値 が clock_t が 格 納 可 能 な 最 大 値 を 超 過 し た 際 に も 同 じ 問 題 が 起 こ り 得 る 。

関 連 項 目

time(1), getrusage(2), wait(2), clock(3), sysconf(3), time(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。