other versions
other sections
TIMES(2) | Linux Programmer's Manual | TIMES(2) |
名前¶
times - プロセス時間を取得する書式¶
#include <sys/times.h>説明¶
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) を返す。 この返り値は clock_t 型が取り得る範囲からオーバーフローするかもしれない。 エラーの場合、 (clock_t) -1 が返され、 errno が適切に設定される。エラー¶
- EFAULT
- tms がプロセスのアドレス空間の外を指している。
準拠¶
SVr4, 4.3BSD, POSIX.1-2001.注意¶
一秒あたりのクロック数は以下で得ることができる。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 以降で修正されている。
歴史¶
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.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-04-16 | Linux |