times - システムコールの説明 - Linux コマンド集 一覧表
名前
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_utime と tms_cutime の合計である。 tms_cstime フィールドは、 終了を待っている全ての子プロセスの tms_stime と tms_cstime の合計である。
終了する子(及びその子孫)プロセスの時間は wait (2) や waitpid (2)がプロセス ID を返した瞬間に加算される。 つまり、子がまだ終了を待っていない状態では 孫プロセスの時間は決して現れない。
全ての時間はクロック数で返される。
返り値
times ()は過去のある時点から経過したクロック数 (clock tick) を返す。 Linux 2.4 とそれ以前のバージョンでは、この「ある時点」とは システムが起動した瞬間である。 Linux 2.6 からは、この「ある時点」はシステム起動時刻の (2^32/HZ) - 300 (およそ 4億2900万) 秒前となる。 この返り値は clock_t 型が取り得る範囲からオーバーフローするかもしれない。 エラーの場合、(clock_t) -1 が返され、 errno が適切に設定される。
注意
一秒あたりのクロック数は
sysconf(_SC_CLK_TCK);
を使って得ることが出来る。
POSIX-1996 では、CLK_TCK シンボル
(
<time.h>
で定義されている) は古いものであると記述されている。
今ではこれは古いものである。
Linux 2.6.9 より前のバージョンでは、
SIGCHLD
を
SIG_IGN
に設定すると
終了した子プロセスの回数は
自動的に
tms_cstime
と
tms_cutime
フィールドに含まれる。
しかし、POSIX.1-2001 では、この動作は呼び出し元が
wait
()関数群で子プロセスを待った場合にのみ起きるべきだとしている。
標準とは異なるこの動作は Linux 2.6.9 以降で修正されている。
Linux では、
buf
引数に NULL を指定することができ、その場合は
times
()は単に関数の結果を返す。
しかし、POSIX はこの振る舞いは規定されておらず、
その他のほとんどの Unix 実装は
buf
の値として非 NULL の値を要求する。
clock (3) は clock_t 型の値を返し、これはクロック数ではなく CLOCKS_PER_SEC が単位である点に注意すること。
準拠
SVr4, 4.3BSD, POSIX.1-2001.
歴史
SVr1-3 では long を返し、構造体のメンバに time_t 型を使っていたが、紀元からの秒数ではなくクロック数を格納していた。 V7 では構造体のメンバに long 型を使っていた。まだ time_t 型がなかったからである。
古いシステムでは一秒あたりのクロック数は HZ 変数で与えられる。
関連項目
time
(1),
getrusage
(2),
wait
(2),
clock
(3),
sysconf
(3),
time
(7)