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
This commit is contained in:
parent
ffda66c299
commit
a870bf2c31
@ -81,12 +81,14 @@ int s_uname(KINFO *);
|
||||
void showkey(void);
|
||||
void started(KINFO *, VARENT *);
|
||||
void state(KINFO *, VARENT *);
|
||||
void systime(KINFO *, VARENT *);
|
||||
void tdev(KINFO *, VARENT *);
|
||||
void tdnam(KINFO *, VARENT *);
|
||||
void tname(KINFO *, VARENT *);
|
||||
void ucomm(KINFO *, VARENT *);
|
||||
void uname(KINFO *, VARENT *);
|
||||
void upr(KINFO *, VARENT *);
|
||||
void usertime(KINFO *, VARENT *);
|
||||
void vsize(KINFO *, VARENT *);
|
||||
void wchan(KINFO *, VARENT *);
|
||||
__END_DECLS
|
||||
|
@ -189,6 +189,7 @@ static VAR var[] = {
|
||||
UINT, UIDFMT, 0},
|
||||
{"svuid", "SVUID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_svuid),
|
||||
UINT, UIDFMT, 0},
|
||||
{"systime", "SYSTIME", NULL, USER, systime, NULL, 9, 0, CHAR, NULL, 0},
|
||||
{"tdaddr", "TDADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2,
|
||||
KOFF(ki_tdaddr), KPTR, "lx", 0},
|
||||
{"tdev", "TDEV", NULL, 0, tdev, NULL, 5, 0, CHAR, NULL, 0},
|
||||
@ -210,6 +211,8 @@ static VAR var[] = {
|
||||
KOFF(ki_paddr), KPTR, "lx", 0},
|
||||
{"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN, 0, CHAR,
|
||||
NULL, 0},
|
||||
{"usertime", "USERTIME", NULL, USER, usertime, NULL, 9, 0, CHAR, NULL,
|
||||
0},
|
||||
{"usrpri", "", "upr", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"vsize", "", "vsz", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
|
||||
{"vsz", "VSZ", NULL, 0, vsize, NULL, 6, 0, CHAR, NULL, 0},
|
||||
|
@ -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;
|
||||
@ -589,6 +575,53 @@ cputime(KINFO *k, VARENT *ve)
|
||||
(void)printf("%*s", v->width, obuff);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
10
bin/ps/ps.1
10
bin/ps/ps.1
@ -29,7 +29,7 @@
|
||||
.\" @(#)ps.1 8.3 (Berkeley) 4/18/94
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 5, 2011
|
||||
.Dd March 16, 2011
|
||||
.Dt PS 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -205,8 +205,8 @@ Display information about processes which match the specified process IDs.
|
||||
Sort by current CPU usage, instead of the combination of controlling
|
||||
terminal and process ID.
|
||||
.It Fl S
|
||||
Change the way the process time is calculated by summing all exited
|
||||
children to their parent process.
|
||||
Change the way the process times, namely cputime, systime, and usertime,
|
||||
are calculated by summing all exited children to their parent process.
|
||||
.It Fl T
|
||||
Display information about processes attached to the device associated
|
||||
with the standard input.
|
||||
@ -596,6 +596,8 @@ symbolic process state (alias
|
||||
saved gid from a setgid executable
|
||||
.It Cm svuid
|
||||
saved UID from a setuid executable
|
||||
.It Cm systime
|
||||
accumulated system CPU time
|
||||
.It Cm tdaddr
|
||||
thread address
|
||||
.It Cm tdev
|
||||
@ -626,6 +628,8 @@ scheduling priority on return from system call (alias
|
||||
.Cm usrpri )
|
||||
.It Cm user
|
||||
user name (from UID)
|
||||
.It Cm usertime
|
||||
accumulated user CPU time
|
||||
.It Cm vsz
|
||||
virtual size in Kbytes (alias
|
||||
.Cm vsize )
|
||||
|
Loading…
x
Reference in New Issue
Block a user