Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

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