clock_t times(struct tms *buf);
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 を返した瞬間に加算される。 つまり、子がまだ終了を待っていない状態では 孫プロセスの時間は決して現れない。
sysconf(_SC_CLK_TCK);
POSIX.1-1996 では、CLK_TCK シンボル (<time.h> で定義されている) は古いものであると記述されている。 今ではこれは古いものである。
Linux 2.6.9 より前のバージョンでは、 SIGCHLD を SIG_IGN に設定すると 終了した子プロセスの回数は 自動的に tms_cstime と tms_cutime フィールドに含まれる。 しかし、POSIX.1-2001 では、この動作は呼び出し元が wait(2) 関数群で子プロセスを待った場合にのみ起きるべきだとしている。 標準とは異なるこの動作は Linux 2.6.9 以降で修正されている。
Linux では、 buf 引数に NULL を指定することができ、その場合は times() は単に関数の結果を返す。 しかし、POSIX はこの振る舞いは規定されておらず、 その他のほとんどの Unix 実装は buf の値として非 NULL の値を要求する。
clock(3) は clock_t 型の値を返し、これはクロック数ではなく CLOCKS_PER_SEC が単位である点に注意すること。
古いシステムでは一秒あたりのクロック数は HZ 変数で与えられる。