8—31对每个命令进行计时,打印从tms中提取的值
来源:互联网 发布:东方不败同人知离 编辑:程序博客网 时间:2024/06/05 20:34
一:注意头文件为<sys/times.h>,time后面有s。
源代码:
cat -n 8_31.c
1 #include "apue.h"
2 #include <sys/times.h>
3
4
5 static void pr_times(clock_t,struct tms *,struct tms *);
6 static void do_cmd(char *);
7
8 int main(int argc,char **argv)
9 {
10 int i =1;
11 for (i = 1; i < argc; ++i){
12 do_cmd(argv[i]);
13 }
14 return 0;
15 }
16
17
18
19 static void do_cmd(char *cmd)
20 {
21 struct tms start_tms,end_tms;
22 clock_t start,end;
23 int status;
24 printf("\ncommand:%s\n",cmd);
25
26 if ((start = times(&start_tms)) == -1)
27 err_sys("times error");
28 if ((status = system(cmd)) <0 )
29 err_sys("system call error");
30 if ((end = times(&end_tms)) == -1)
31 err_sys("times end error");
32
33 pr_times(end - start,&start_tms,&end_tms);
34 pr_exit(status);
35 }
36
37
38
39 static void pr_times(clock_t real,struct tms *tmsstart,struct tms *tmsend)
40 {
41 static long clktck = 0;
42 if (clktck == 0)
43 if ((clktck = sysconf(_SC_CLK_TCK)) < 0)
44 err_sys("sysconf error");
45
46 printf("real:%7.2f\n",real / (double) clktck);
47 printf("user:%7.2f\n",(tmsend->tms_utime - tmsstart->tms_utime) / (double) clktck );
48 printf("sys:%7.2f\n",(tmsend->tms_stime - tmsstart->tms_stime) / (double) clktck);
49 printf("child user:%7.2f\n",(tmsend->tms_cutime - tmsstart->tms_cutime) / (double)clktck);
50 printf("child sys:%7.2f\n",(tmsend->tms_cstime - tmsstart->tms_cstime) / (double)clktck);
51 }
二 运行结果:
./pr_cmd_time "sleep 5" "date" "man bash > /dev/null"
command:sleep 5
real: 5.02
user: 0.00
sys: 0.00
child user: 0.00
child sys: 0.00
normal termination,exit status = 0
command:date
Mon Nov 2 20:14:51 CST 2015
real: 0.02
user: 0.00
sys: 0.00
child user: 0.00
child sys: 0.00
normal termination,exit status = 0
command:man bash > /dev/null
Reformatting page. Please Wait... done
real: 0.51
user: 0.00
sys: 0.00
child user: 0.47
child sys: 0.08
normal termination,exit status = 0
从命令三可以看出 cpu时间都是在子进程 从而可以推断出 shell和cmd都是在子进程里运行的。
- 8—31对每个命令进行计时,打印从tms中提取的值
- EXCEL从身份证号码中提取生日,并对当月生日的进行提示
- 模仿linux中string命令的实现,实现从文件中提取连续4个以上的可打印字符
- 从尾到头打印链表每个节点的值。
- 从尾到头打印链表每个节点的值。
- 从尾到头打印链表每个节点的值
- TMS中Struts的改动
- 从MySQL中提取数据并对字段进行字符串处理
- 对Python中常用迭代方法进行计时
- 从控制台获取一串字符串,并对每个字符出现的次数进行统计
- MATLAB中对视频进行提取图像
- 利用VBA对提取excel中字母、数字进行提取
- 第4章 处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)
- shell命令,从字符串中提取数字
- 输入一个链表的头结点,从尾到头反过来打印每个结点的值——5
- logstash中字符串的split,对每个子串进行json解析
- 关于web打印中,只对iframe内容进行预览打印的问题
- 输入一个链表的头结点,从尾到头反过来打印每个节点的值。
- powerdesigner使用教程
- Apache mahout中HMM(隐马尔可夫)算法的测试
- MyBatis学习总结(三)——优化MyBatis配置文件中的配置
- 为什么操作符 + - * / 返回值应该为const
- Android FragmentPagerAdapter vs FragmentStatePagerAdapter
- 8—31对每个命令进行计时,打印从tms中提取的值
- java类同时引用父类和接口的成员变量,需要指明是父类的还是接口的
- getlasterr 错误码和错误原因
- 开源中国Android源码剖析(1)
- OpenCv学习之 addWeighted
- SEL的使用
- PHPExcel 使用帮助
- js编写的语法高亮引擎
- android 手机作为手写输入板