我有一个简单的函数,它创建一个子进程,等待它完成并打印CPU系统和用户时间。
int PrintChildProcessTime(char **arg)
{
pid_t pid;
int status;
struct rusage usage;
if ((pid=fork()) == 0)
{
execvp(arg[0],arg);
perror("Execvp error");
_exit(1);
}
else if (pid > 0)
{
wait4(pid, &status, 0, &usage);
printf ("CPU time: %ld.%06ld sec user, %ld.%06ld sec system\n", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec, usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
}
else
{
perror("Fork error");
_exit(2);
}
}
问题是,即使我将sleep 10
作为**arg
传递并且父进程等待子进程完成,它仍会在系统和用户CPU时间内显示0.000000。
我做错了什么? 谢谢你的帮助。
答案 0 :(得分:1)
这是因为子进程在用户空间或内核空间中花费的时间。 sleep
只是暂停调用过程,并且根本不会导致任何CPU使用。
相反,让您的子进程执行某些操作,并且您将看到CPU时间。
例如,有一个名为myscript
的脚本,其中包含:
#!/bin/bash
for((i=0;i<1000000;i++)); do
echo hi >/dev/null
done
并将其作为子进程执行,它将显示一些CPU使用情况。