]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - io/getrusage.c
2 * Copyright (c) 2005 Silicon Graphics, Inc.
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it would be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include <sys/resource.h>
25 static cmdinfo_t getrusage_cmd
;
28 * Report process resource utilisation. Formatting options:
29 * "Shell" format: 0.000u 0.000s 0:00.00 0.0% 0+0k 0+0io 0pf+0w
31 * 0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 0maxresident)k
32 * 0inputs+0outputs (0major+0minor)pagefaults 0swaps
33 * Comma Separated Value format: 0.000,0.000,00:00:00.00,0.0,0,0,0,0,0,0
40 struct timeval wallclk
, timenow
;
42 double usrtime
, systime
, elapsed
, pct_cpu
;
48 while ((c
= getopt(argc
, argv
, "Cv")) != EOF
) {
57 return command_usage(&getrusage_cmd
);
61 return command_usage(&getrusage_cmd
);
63 if (getrusage(RUSAGE_SELF
, &rusage
) < 0) {
68 gettimeofday(&timenow
, NULL
);
69 wallclk
= tsub(timenow
, stopwatch
);
70 elapsed
= (double)wallclk
.tv_sec
+
71 ((double)wallclk
.tv_usec
/ 1000000.0);
72 usrtime
= (double)rusage
.ru_utime
.tv_sec
+
73 ((double)rusage
.ru_utime
.tv_usec
/ 1000000.0);
74 systime
= (double)rusage
.ru_stime
.tv_sec
+
75 ((double)rusage
.ru_stime
.tv_usec
/ 1000000.0);
76 if (elapsed
< usrtime
+ systime
)
79 pct_cpu
= ((usrtime
+ systime
) / elapsed
) * 100;
80 c
= Cflag
? VERBOSE_FIXED_TIME
: TERSE_FIXED_TIME
;
81 timestr(&wallclk
, ts
, sizeof(ts
), c
);
84 printf("%.3f,%.3f,%s,%.1f,%ld,%ld,%ld,%ld,%ld,%ld,%ld\n",
85 usrtime
, systime
, ts
, pct_cpu
,
86 rusage
.ru_majflt
, rusage
.ru_minflt
, rusage
.ru_nswap
,
87 rusage
.ru_inblock
, rusage
.ru_oublock
,
88 rusage
.ru_nvcsw
, rusage
.ru_nivcsw
);
90 printf("%.2fuser %.2fsystem %selapsed %.0f%%CPU "
91 "(%ldavgtext+%ldavgdata %ldmaxresident)k\n"
92 "%ldinputs+%ldoutputs "
93 "(%ldmajor+%ldminor)pagefaults %ldswaps\n",
94 usrtime
, systime
, ts
, pct_cpu
,
95 rusage
.ru_ixrss
, rusage
.ru_idrss
, rusage
.ru_maxrss
,
96 rusage
.ru_inblock
, rusage
.ru_oublock
,
97 rusage
.ru_majflt
, rusage
.ru_minflt
, rusage
.ru_nswap
);
99 printf("%.3fu %.3fs %s %.1f%%\t"
100 "%ld+%ldk %ld+%ldio %ldpf+%ldw\n",
101 usrtime
, systime
, ts
, pct_cpu
,
102 rusage
.ru_maxrss
, rusage
.ru_ixrss
,
103 rusage
.ru_inblock
, rusage
.ru_oublock
,
104 rusage
.ru_majflt
, rusage
.ru_nswap
);
111 getrusage_cmd
.name
= "getrusage";
112 getrusage_cmd
.altname
= "g";
113 getrusage_cmd
.argmin
= 0;
114 getrusage_cmd
.argmax
= -1;
115 getrusage_cmd
.cfunc
= getrusage_f
;
116 getrusage_cmd
.flags
= CMD_NOFILE_OK
| CMD_NOMAP_OK
|
117 CMD_FOREIGN_OK
| CMD_FLAG_ONESHOT
;
118 getrusage_cmd
.oneline
= _("report process resource usage");
121 add_command(&getrusage_cmd
);