《unix高级环境编程》进程控制——进程时间
来源:互联网 发布:外贸进出口软件哪家好 编辑:程序博客网 时间:2024/05/21 17:50
进程时间
进程时间有墙上时钟时间、用户CPU时间和系统CPU时间。任一进程都可以调用 times 函数以获得它自己以及终止子进程的上述值。
- /* 进程时间 */
- /*
- * 函数功能:获取进程的时间:墙上时钟时间、用户CPU时间和系统CPU时间;
- * 返回值:若成功则返回流逝的墙上时钟时间(单位:时钟滴答数),若出错则返回-1;
- * 函数原型:
- */
- #include <sys/times.h>
- clock_t times(struct tms *buf);
- /*
- * struct 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 */
- };
测试程序:
- #include <sys/times.h>
- #include <time.h>
- #include "apue.h"
- static void pr_times(clock_t, struct tms *, struct tms *);
- static void do_cmd(char *);
- void pr_exit(int status);
- int main(int argc, char *argv[])
- {
- int i;
- for(i=1; i<argc; i++){
- do_cmd(argv[i]);
- }
- exit(0);
- }
- static void do_cmd(char* cmd)
- {
- struct tms tmsstart, tmsend;
- clock_t start, end;
- int status;
- printf("\ncommand: %s\n", cmd);
- if((start=times(&tmsstart)) == -1)
- err_sys("times error");
- if((status = system(cmd)) < 0)
- err_sys("system error");
- if((end = times(&tmsend)) == -1)
- err_sys("times error");
- pr_times(end-start, &tmsstart, &tmsend);
- pr_exit(status);
- }
- static void pr_times(clock_t real, struct tms* tmsstart, struct tms* tmsend)
- {
- static long clktck = 0;
- if((clktck = sysconf(_SC_CLK_TCK)) < 0)
- err_sys("sysconf error");
- printf("real: %7.2f\n",real/(double)clktck);
- printf("user: %7.2f\n",(tmsend->tms_utime - tmsstart->tms_utime)/(double)clktck);
- printf("sys: %7.2f\n",(tmsend->tms_stime - tmsstart->tms_stime)/(double)clktck);
- printf("child user: %7.2f\n",(tmsend->tms_cutime - tmsstart->tms_cutime)/(double)clktck);
- printf("child sys: %7.2f\n",(tmsend->tms_cstime - tmsstart->tms_cstime)/(double)clktck);
- }
- void pr_exit(int status)
- {
- if(WIFEXITED(status))
- printf("normal termination, exit status = %d\n", WEXITSTATUS(status));
- else if(WIFSIGNALED(status))
- printf("abnormal termination, signal number = %d%s\n", WTERMSIG(status),
- #ifdef WCOREDUMP
- WCOREDUMP(status) ? "(core file generated)" : " ");
- #else
- " ");
- #endif
- else if(WIFSTOPPED(status))
- printf("child stoped, signal number = %d\n", WSTOPSIG(status));
- }
- 执行:./time "date"
- 输出结果:
- command: date
- Fri Nov 7 20:31:13 CST 2014
- real: 0.00
- user: 0.00
- sys: 0.00
- child user: 0.00
- child sys: 0.00
- normal termination, exit status = 0
0 0
- 《unix高级环境编程》进程控制——进程时间
- 《unix高级环境编程》进程控制——进程时间
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- 《unix高级环境编程》进程控制——进程ID
- 《unix高级环境编程》进程控制——创建进程
- 《unix高级环境编程》进程控制——进程等待
- UNIX环境高级编程——进程控制
- 《unix高级环境编程》进程控制——system函数
- 《unix高级环境编程》进程控制——system函数
- Unix高级环境编程—进程控制(一)
- Unix环境高级编程—进程控制(二)
- Unix环境高级编程—进程控制(三)
- 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
- 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
- 《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
- Unix环境高级编程--进程控制
- ioctl() 获得硬盘序列号
- Eclipse中JVM的介绍及设置
- VLFeat开源库的配置
- textField和textView字数限制
- Log4Net 写入日志文件
- 《unix高级环境编程》进程控制——进程时间
- Live555接收h264使用ffmpeg解码为YUV42
- openwrt环境搭建
- 《unix高级环境编程》进程关系——进程组
- 随机生成一个1~100之间的整数,玩家可以通过函数InputBox命令输入数字来猜测那未知的随机数字
- LeetCode 41 Trapping Rain Water
- JSP String cannot be resolved to a type
- 数组去重复
- android MD5 加密