#include "unistd.h"
#include "sys/times.h"
#include "stdio.h"
#include "errno.h"
#include "sys/param.h"
void PrintTime(clock_t realTime,struct tms* startTime,struct tms* endTime)
{
static long int clocktic=0;
clocktic = sysconf(_SC_CLK_TCK);
if(clocktic < 0)
fprintf(stderr,"sysconf err");
//注意 clock_t 是float类型,而clocktic 是long。运算需要类型转换
fprintf(stdout,"real time : %f\n",realTime/(float)clocktic);
fprintf(stdout,"Parent user cpu time : %f\n",(endTime->tms_utime - startTime->tms_utime)/(float)clocktic);
fprintf(stdout,"Parent sys cpu time : %f\n",(endTime->tms_stime - startTime->tms_stime)/(float)clocktic);
fprintf(stdout,"Child user cpu time : %f\n",(endTime->tms_cutime - startTime->tms_cutime)/(float)clocktic);
fprintf(stdout,"Child sys cpu time : %f\n",(endTime->tms_cstime - startTime->tms_cstime)/(float)clocktic);
}
static void DoCmd(char *cmd)
{
clock_t start,end;
struct tms tms_start,tms_end;
int ret;
start = times(&tms_start);
if(start == -1)
fprintf(stderr,"times err");
if(system(cmd)<0)
fprintf(stderr,"system err");
end = times(&tms_end);
if(end == -1)
fprintf(stderr,"times err");
PrintTime(end-start,&tms_start,&tms_end);
}
int main(int argc,char* argv[])
{
int i=0;
for(i=1; i < argc; i++){
DoCmd(argv[i]);
}
exit(0);
}
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ./a.out "date" "sleep 5" "man bash > /dev/null"
2024年 04月 23日 星期二 02:14:07 PDT
real time : 0.010000
Parent user cpu time : 0.000000
Parent sys cpu time : 0.000000
Child user cpu time : 0.000000
Child sys cpu time : 0.000000
real time : 5.000000
Parent user cpu time : 0.000000
Parent sys cpu time : 0.000000
Child user cpu time : 0.000000
Child sys cpu time : 0.000000
real time : 0.260000
Parent user cpu time : 0.000000
Parent sys cpu time : 0.000000
Child user cpu time : 0.160000
Child sys cpu time : 0.030000
mhr@ubuntu:~/Desktop/xitongbiancheng/test$