BUGS

Linux系统调用约定在某些体系结构(特别是i386)上的局限性意味着,在Linux 2.6上,启动后不久,times()可以返回-1,这是一个很小的时间窗口(41秒),错误地指示发生了错误。当返回值超过可以存储在clock_t中的最大值时,可能会发生相同的问题。

说明

times()将当前的处理时间存储在buf指向的struct tms中。结构tms如以下定义:

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的时刻,添加了终止子项(及其子代)的时间。特别是,从未见过孩子没有等待的孙子时代。

报告的所有时间均为时钟滴答。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.3BSD。

另外参见

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

备注

每秒的时钟滴答数可以使用以下方法获得:

sysconf(_SC_CLK_TCK);

在POSIX.1-1996中,符号CLK_TCK(在中定义)被过时了。现在已经过时了。

在2.6.9之前的Linux内核版本中,如果将SIGCHLD的处置设置为SIG_IGN,则终止子级的时间将自动包含在tms_cstime和tms_cutime字段中,尽管POSIX.1-2001表示仅在调用时会发生这种情况。在其子进程上处理wait(2)s。 Linux 2.6.9和更高版本中纠正了此不符合项。

在Linux上,可以将buf参数指定为NULL,其结果是times()仅返回函数结果。但是,POSIX未指定此行为,并且大多数其他UNIX实现要求buf的值不为NULL。

请注意,clock(3)还会返回类型为clock_t的值,但是该值以CLOCKS_PER_SEC为单位进行度量,而不是times()使用的时钟滴答。

在Linux上,用于测量times()返回值的"过去的任意点"在内核版本之间有所不同。在Linux 2.4及更早版本上,这一点是引导系统的时刻。从Linux 2.6开始,这一点是(2 ^ 32 / HZ)-系统启动时间之前300秒。跨内核版本(和跨UNIX实现)的这种可变性,再加上返回值可能溢出clock_t范围的事实,这意味着可移植的应用程序应避免使用该值。要测量经过时间的变化,请改用clock_gettime(2)。

Historical

SVr1-3返回long,并且struct成员的类型为time_t,尽管它们存储时钟滴答,而不是自Epoch以来的秒。 V7对struct成员使用了很长时间,因为它还没有类型time_t。

TIMES - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

错误说明

EFAULT
tms指向进程的地址空间之外。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

语法

#include <sys/times.h>
clock_t times(struct tms *buf);

返回值

times()返回自过去任意点以来经过的时钟滴答数。返回值可能会溢出clock_t类型的可能范围。如果出错,则返回(clock_t)-1,并正确设置errno。

名称

times-获取处理时间

日期:2019-08-20 17:59:35 来源:oir作者:oir