diff options
author | kib <kib@FreeBSD.org> | 2011-03-17 11:25:32 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2011-03-17 11:25:32 +0000 |
commit | 425e556ac9cfcee7074d9eae8e246690de567ea7 (patch) | |
tree | d85b94710406af532df69f8fe797bc215a6ec248 /bin/ps/print.c | |
parent | 329130799d270217d976d559253a838c169cd221 (diff) | |
download | FreeBSD-src-425e556ac9cfcee7074d9eae8e246690de567ea7.zip FreeBSD-src-425e556ac9cfcee7074d9eae8e246690de567ea7.tar.gz |
Implement the usertime and systime keywords for ps, printing the
corresponding times reported by getrusage().
Submitted by: Dan Nelson <dnelson allantgroup com>
MFC after: 1 week
Diffstat (limited to 'bin/ps/print.c')
-rw-r--r-- | bin/ps/print.c | 69 |
1 files changed, 51 insertions, 18 deletions
diff --git a/bin/ps/print.c b/bin/ps/print.c index 46b979b..253793a 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -550,12 +550,11 @@ vsize(KINFO *k, VARENT *ve) (void)printf("%*lu", v->width, (u_long)(k->ki_p->ki_size / 1024)); } -void -cputime(KINFO *k, VARENT *ve) +static void +printtime(KINFO *k, VARENT *ve, long secs, long psecs) +/* psecs is "parts" of a second. first micro, then centi */ { VAR *v; - long secs; - long psecs; /* "parts" of a second. first micro, then centi */ char obuff[128]; static char decimal_point; @@ -566,20 +565,7 @@ cputime(KINFO *k, VARENT *ve) secs = 0; psecs = 0; } else { - /* - * This counts time spent handling interrupts. We could - * fix this, but it is not 100% trivial (and interrupt - * time fractions only work on the sparc anyway). XXX - */ - secs = k->ki_p->ki_runtime / 1000000; - psecs = k->ki_p->ki_runtime % 1000000; - if (sumrusage) { - secs += k->ki_p->ki_childtime.tv_sec; - psecs += k->ki_p->ki_childtime.tv_usec; - } - /* - * round and scale to 100's - */ + /* round and scale to 100's */ psecs = (psecs + 5000) / 10000; secs += psecs / 100; psecs = psecs % 100; @@ -590,6 +576,53 @@ cputime(KINFO *k, VARENT *ve) } void +cputime(KINFO *k, VARENT *ve) +{ + long secs, psecs; + + /* + * This counts time spent handling interrupts. We could + * fix this, but it is not 100% trivial (and interrupt + * time fractions only work on the sparc anyway). XXX + */ + secs = k->ki_p->ki_runtime / 1000000; + psecs = k->ki_p->ki_runtime % 1000000; + if (sumrusage) { + secs += k->ki_p->ki_childtime.tv_sec; + psecs += k->ki_p->ki_childtime.tv_usec; + } + printtime(k, ve, secs, psecs); +} + +void +systime(KINFO *k, VARENT *ve) +{ + long secs, psecs; + + secs = k->ki_p->ki_rusage.ru_stime.tv_sec; + psecs = k->ki_p->ki_rusage.ru_stime.tv_usec; + if (sumrusage) { + secs += k->ki_p->ki_childstime.tv_sec; + psecs += k->ki_p->ki_childstime.tv_usec; + } + printtime(k, ve, secs, psecs); +} + +void +usertime(KINFO *k, VARENT *ve) +{ + long secs, psecs; + + secs = k->ki_p->ki_rusage.ru_utime.tv_sec; + psecs = k->ki_p->ki_rusage.ru_utime.tv_usec; + if (sumrusage) { + secs += k->ki_p->ki_childutime.tv_sec; + psecs += k->ki_p->ki_childutime.tv_usec; + } + printtime(k, ve, secs, psecs); +} + +void elapsed(KINFO *k, VARENT *ve) { VAR *v; |