Linux中是否有一个函数可以让我看到进程完成后进程使用了多少CPU?我需要类似于bash“time”命令的东西。我是fork()进程,然后等待使用wait()让孩子完成。准确测量“实际”时间(fork()和exit()之间经过的实际时间)的方法,即使在子进程变成僵尸后很长时间调用wait()也是受欢迎的,但我不确定它是否是可能的。
答案 0 :(得分:5)
当然,wait3
和wait4
可以为您提供帮助。或者(更便携)您可以使用getrusage(2)
。
wait3()和wait4()系统调用类似于waitpid(2),但是 另外返回有关孩子的资源使用信息
rusage
指向的结构。
wait3
struct rusage usage;
wait3(&status, 0, &usage);
getrusage
当然,wait3
和wait4
只是一种便利。所以你可以使用getrusage
:
getrusage(RUSAGE_CHILDREN, &usage);
缺点是这会告诉您所有已终止子项使用的资源。
所以,一旦你明白了,你对rusage
做了什么? struct rusage
具有以下形式:
struct rusage {
struct timeval ru_utime; /* user CPU time used */
struct timeval ru_stime; /* system CPU time used */
/* More. */
};
答案 1 :(得分:0)
bash功能“times”报告shell及其子项使用的总用户/系统时间。遗憾的是,此功能不报告总内存,I / O等.IE:它不使用getrusage(它应该)。
/ usr / bin / time程序将为您提供执行时间,内存占用。所以你可以做/ usr / bin / time bash myprog.sh ...并获得所有孩子的累积时间。