进程环境与进程控制(5): 进程时间
来源:互联网 发布:java培训内容 编辑:程序博客网 时间:2024/06/10 21:15
#include <sys/times.h>
clock_t times(struct tms *buf);
clock_t times(struct tms *buf);
返回值: 若成功则返回流逝的墙上时钟时间, 若出错返回-1.
所有由此函数返回的clock_t值都用_SC_CLK_TCK变换成秒数.(由sysconf函数返回的每秒时钟滴答数)
此函数填写由buf指向的tms结构, 该结构定义如下:
struct tms
{
clock_t tms_utime; /* user CPU time */
clock_t tms_stime; /* system CPU time */
clock_t tms_cutime; /* user CPU time, terminated children */
clock_t tms_cstime; /* system CPU time, terminated children */
};
{
clock_t tms_utime; /* user CPU time */
clock_t tms_stime; /* system CPU time */
clock_t tms_cutime; /* user CPU time, terminated children */
clock_t tms_cstime; /* system CPU time, terminated children */
};
注意: 此结构没有包含墙上时钟是的任何测量值. 作为替代, times函数返回墙上时钟时间作为函数值. 此值是相对于过去的某一时刻测试的, 所以不能用其绝对值, 而必须使用其相对值.
例如, 调用times, 保存其返回值. 在以后某个时间再次调用times, 从新的返回值中减去以前的返回值, 此差值就是墙上时钟时间.
该结构中的后两个成员是针对子进程的变量, 包含了用wait, waitpid等待到的各个子进程的值.
实例代码:
#include <sys/times.h>
static void pr_times(clock_t, struct tms *, struct tms *);
static int do_cmd(char *);
int main()
{
int i;
setbuf(stdout, NULL);
for (i = 1; i < argc; i++)
do_cmd(argv[i]);
return 0;
}
static int do_cmd(char *cmd)
{
struct tms tmsstart, tmsend;
clock_t start, end;
int status;
printf(" command: %s ", cmd);
if ((start = times(&tmsstart)) == -1)
/* error handler */
if ((status == system(cmd)) < 0)
/* error handler */
if (end = times(&tmsend)) == -1_
/* error handler */
pr_times(end-start, &tmsstart, &tmsend);
return status;
}
static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend)
{
static long clktck = 0;
if (clktck == 0)
if ((clktck = sysconf(_SC_CLK_TCK)) < 0)
/* error hanlder */
printf(" read: %7.2f ", read / (double)clktck);
printf(" user: %7.2f ", tmsend->tms_utime - tmsstart->tms_utime) / (double) clktck);
...
...
}
static void pr_times(clock_t, struct tms *, struct tms *);
static int do_cmd(char *);
int main()
{
int i;
setbuf(stdout, NULL);
for (i = 1; i < argc; i++)
do_cmd(argv[i]);
return 0;
}
static int do_cmd(char *cmd)
{
struct tms tmsstart, tmsend;
clock_t start, end;
int status;
printf(" command: %s ", cmd);
if ((start = times(&tmsstart)) == -1)
/* error handler */
if ((status == system(cmd)) < 0)
/* error handler */
if (end = times(&tmsend)) == -1_
/* error handler */
pr_times(end-start, &tmsstart, &tmsend);
return status;
}
static void pr_times(clock_t real, struct tms *tmsstart, struct tms *tmsend)
{
static long clktck = 0;
if (clktck == 0)
if ((clktck = sysconf(_SC_CLK_TCK)) < 0)
/* error hanlder */
printf(" read: %7.2f ", read / (double)clktck);
printf(" user: %7.2f ", tmsend->tms_utime - tmsstart->tms_utime) / (double) clktck);
...
...
}
运行:
$ ./a.out "sleep 5" "date"
command: sleep 5
real: 5.02
user: 0.00
sys: 0.00
child user: 0.01
child sys: 0.00
command: date
Fri Jun 22 17:11:20 EST 2007
real: 0.01
user: 0.00
sys: 0.00
child user: 0.01
child sys: 0.00
- 进程环境与进程控制(5): 进程时间
- 进程环境与进程控制
- UNIX进程环境与进程控制
- 《unix高级环境编程》进程控制——进程时间
- 《unix高级环境编程》进程控制——进程时间
- unix环境高级编程--进程环境与进程控制
- 进程控制与进程关系
- 进程控制与进程通信
- 进程环境与进程控制(2): 堆和栈
- 进程环境与进程控制(4): exec函数
- 8.16 进程控制_进程时间
- 进程环境与进程控制(1): 进程的开始与终止
- 进程环境与进程控制(3): 等待子进程wait/waitpid
- 进程控制与调度
- 进程描述与控制
- 进程与控制
- 进程控制与进程通信编程
- Unix 环境编程: 进程控制
- 利用AXIS添加WebService
- 半笺心语凝成香
- 注册好久了,就是没有写过东西。哈哈
- httpRunTime web.config的属性
- asp.net实现弹窗
- 进程环境与进程控制(5): 进程时间
- VS2005网站发布不便问题讨论
- Google的脚本错误
- Array#[]
- 经典的25句话
- .Net下全屏的实现
- 改变鼠标指针样式
- 第一章居然是苦水!唉!唉!唉!
- asp上传文件失败的原因