我在linux和windows上使用以下程序来获得当前进程的cpu利用率。
Linux的:
int main()
{
int ret;
char *buf;
int i=0;
int who= RUSAGE_SELF;
struct rusage usage;
struct rusage *p=&usage;
ret=getrusage(who,p);
printf("user time used: %16lf %16lfn",p->ru_utime.tv_sec,p->ru_utime.tv_usec);
printf("system time used: %16lf %16lfn",p->ru_stime.tv_sec,p->ru_stime.tv_usec);
system("ls");
printf("user time used: %16lf %16lfn",p->ru_utime.tv_sec,p->ru_utime.tv_usec);
printf("system time used: %16lf %16lfn", p->ru_stime.tv_sec,p->ru_stime.tv_usec);
return 0;
}
linux上的输出:
user time used: 0.000000 -1.999568
system time used: 0.000000 -1.999568
a.out check.c
user time used: 0.000000 -1.999568
system time used: 0.000000 -1.999568
这是否意味着系统(“ls”)命令没有执行任何cpu周期?我如何获得任何命令或程序使用的确切cpu周期?
我在Windows上遇到类似的问题。对于以下代码。
视窗:
int main()
{
int i=0;
HANDLE hProcess = GetCurrentProcess();
FILETIME ftCreation, ftExit, ftKernel, ftUser;
SYSTEMTIME stKernel;
SYSTEMTIME stUser;
GetProcessTimes(hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser);
FileTimeToSystemTime(&ftKernel, &stKernel);
FileTimeToSystemTime(&ftUser, &stUser);
printf("nTime in kernel mode = %uh %um %us %ums", stKernel.wHour,stKernel.wMinute, stKernel.wSecond, stKernel.wMilliseconds);
printf("nTime in user mode = %uh %um %us %ums n", stUser.wHour,stUser.wMinute, stUser.wSecond, stUser.wMilliseconds);
system("dir");
GetProcessTimes(hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser);
FileTimeToSystemTime(&ftKernel, &stKernel);
FileTimeToSystemTime(&ftUser, &stUser);
printf("nTime in kernel mode = %uh %um %us %ums", stKernel.wHour,stKernel.wMinute, stKernel.wSecond, stKernel.wMilliseconds);
printf("nTime in user mode = %uh %um %us %ums n", stUser.wHour,stUser.wMinute, stUser.wSecond, stUser.wMilliseconds);
system("PAUSE");
return 0;
}
以上程序输出在windows dev c ++上:
Time in kernel mode: 0h 0m 0s 15ms
Time in user mode: 0h 0m 0s 15ms
Time in kernel mode: 0h 0m 0s 15ms
Time in user mode: 0h 0m 0s 15ms
能告诉我们如何才能获得上述程序正确的CPU使用率?还有办法了解IO使用情况或读写磁盘/内存的字符数吗?
提前致谢。