#include <sys/types.h>
w�o.a6/0T-r&Q0 #include <sys/time.h>
&[(F.i |!I[*w9?0 #include <sys/resource.h>我是網管部落格)~ID6U$V)_R1Tib2g
-@,eI5Rq9_s"H0 #define RUSAGE_SELF 0
o/n.aws.Nn)g"^0X0 #define RUSAGE_CHILDREN -1我是網管部落格e~,q3g3X)xLKx
R+OzfX0 int getrusage(int who, struct rusage *rusage);
getrusage函數有兩個參數。第一個參數可以設定為RUSAGE_SELF或者RUSAGE_CHILDREN。如果設定成 RUSAGE_SELF,那麼將會以當前進程的相關資訊來填充rusage(資料)結構。反之,如果設定成RUSAGE_CHILDREN,那麼 rusage結構中的資料都將是當前進程的子進程的資訊。
rusage(資料)結構定義在/usr/include/sys/resource.h中。它含有以下成員變數:
struct rusage {我是網管部落格;L+VR9o ?2gF(gUR
struct timeval ru_utime; /* user time used */
pT~mI/v0P_0 struct timeval ru_stime; /* system time used */我是網管部落格,Xa4f v9K
long ru_maxrss; /* max resident set size */
9T1e'QV v(|0 long ru_ixrss; /* integral shared memory size */我是網管部落格+u Z;x;@(N@9Z
long ru_idrss; /* integral unshared data */
6SS+}!CO1t0 long ru_isrss; /* integral unshared stack */我是網管部落格�w4aOh5hU
long ru_minflt; /* page reclaims */
i3q&r$v)/gO0 long ru_majflt; /* page faults */
1m1/0G!a`$m0a0 long ru_nswap; /* swaps */
1`I5N a*H$t)q`V0}%a0 long ru_inblock; /* block input operations */我是網管部落格u7t/&y?(paX
long ru_oublock; /* block output operations */我是網管部落格/PNU'F(Mrf'u'Z�rD
long ru_msgsnd; /* messages sent */
Wk ^]d!gF0 long ru_msgrcv; /* messages received */我是網管部落格;m#_:m~}/Mv?
long ru_nsignals; /* signals received */我是網管部落格?7g�T o{H
long ru_nvcsw; /* voluntary context switches */
7{He8y5a-{#P_n0 long ru_nivcsw; /* involuntary " */
QJPCb0ep {0 };
樣本:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
int
main(int argc, char **argv)
{
struct rusage buf;
if(argc == 2) {
system(argv[1]);
}else {
fprintf(stderr,"./getrusage /"ls -l >/dev/null/"/n");
exit(0);
}
int err = getrusage(RUSAGE_CHILDREN, &buf);
//int err = getrusage(RUSAGE_SELF, &buf);
printf("ERR=%d/n", err);
printf("%20s:%ld/%ld/t%s/n", "ru_utime",
buf.ru_utime.tv_sec, buf.ru_utime.tv_usec,
"user time used (secs/usecs)");
printf("%20s:%ld/%ld/t%s/n", "ru_stime",
buf.ru_stime.tv_sec,
buf.ru_stime.tv_usec,
"system time used (secs/usecs)");
printf("%20s:%-10ld/t%s/n",
"ru_maxrss",
buf.ru_maxrss,
"maximum resident set size");
printf("%20s:%-10ld/t%s/n",
"ru_ixrss",
buf.ru_ixrss,
"integral shared memory size");
printf("%20s:%-10ld/t%s/n",
"ru_idrss",
buf.ru_idrss,
"integral unshared data size");
printf("%20s:%-10ld/t%s/n",
"ru_isrss",
buf.ru_isrss,
"integral unshared data stack size");
printf("%20s:%-10ld/t%s/n",
"ru_minflt",
buf.ru_minflt,
"page reclaims");
printf("%20s:%-10ld/t%s/n",
"ru_majflt",
buf.ru_majflt,
"page faults");
printf("%20s:%-10ld/t%s/n",
"ru_nswap",
buf.ru_nswap,
"swaps");
printf("%20s:%-10ld/t%s/n",
"ru_inblock",
buf.ru_inblock,
"block input operations");
printf("%20s:%-10ld/t%s/n",
"ru_oublock",
buf.ru_oublock,
"block output operations");
printf("%20s:%-10ld/t%s/n",
"ru_msgsnd",
buf.ru_msgsnd,
"messages sent");
printf("%20s:%-10ld/t%s/n",
"ru_msgrcv",
buf.ru_msgrcv,
"messages received");
printf("%20s:%-10ld/t%s/n",
"ru_nsignals",
buf.ru_nsignals,
"signals received");
printf("%20s:%-10ld/t%s/n",
"ru_nvcsw",
buf.ru_nvcsw,
"voluntary context switches");
printf("%20s:%-10ld/t%s/n",
"ru_nivcsw",
buf.ru_nivcsw,
"involuntary context switches");
exit(0);
}