svn commit: r219972 - head/bin/ps
Alexander Best
arundel at freebsd.org
Thu Mar 24 20:27:35 UTC 2011
On Thu Mar 24 11, Edward Tomasz Napierala wrote:
> Author: trasz
> Date: Thu Mar 24 20:15:42 2011
> New Revision: 219972
> URL: http://svn.freebsd.org/changeset/base/219972
>
> Log:
> Add proper width calculation for time fields (time, cputime and usertime).
> This fixes the ugly overflow in "ps aux" output for "[idle]".
nice. maybe you could also take a look at these cases:
1) ps -wlu is not honouring -w
2) ps -lud is not honouring -d
3) ps(1) doesn't mention that -X is the default
cheers.
alex
>
> Modified:
> head/bin/ps/extern.h
> head/bin/ps/keyword.c
> head/bin/ps/print.c
>
> Modified: head/bin/ps/extern.h
> ==============================================================================
> --- head/bin/ps/extern.h Thu Mar 24 19:50:34 2011 (r219971)
> +++ head/bin/ps/extern.h Thu Mar 24 20:15:42 2011 (r219972)
> @@ -74,12 +74,15 @@ void rgroupname(KINFO *, VARENT *);
> void runame(KINFO *, VARENT *);
> void rvar(KINFO *, VARENT *);
> int s_comm(KINFO *);
> +int s_cputime(KINFO *);
> int s_label(KINFO *);
> int s_loginclass(KINFO *);
> int s_logname(KINFO *);
> int s_rgroupname(KINFO *);
> int s_runame(KINFO *);
> +int s_systime(KINFO *);
> int s_uname(KINFO *);
> +int s_usertime(KINFO *);
> void showkey(void);
> void started(KINFO *, VARENT *);
> void state(KINFO *, VARENT *);
>
> Modified: head/bin/ps/keyword.c
> ==============================================================================
> --- head/bin/ps/keyword.c Thu Mar 24 19:50:34 2011 (r219971)
> +++ head/bin/ps/keyword.c Thu Mar 24 20:15:42 2011 (r219972)
> @@ -189,12 +189,14 @@ 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},
> + {"systime", "SYSTIME", NULL, USER|DSIZ, systime, s_systime, 15, 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},
> {"tdnam", "TDNAM", NULL, LJUST, tdnam, NULL, COMMLEN, 0, CHAR, NULL, 0},
> - {"time", "TIME", NULL, USER, cputime, NULL, 9, 0, CHAR, NULL, 0},
> + {"time", "TIME", NULL, USER|DSIZ, cputime, s_cputime, 15, 0, CHAR,
> + NULL, 0},
> {"tpgid", "TPGID", NULL, 0, kvar, NULL, 4, KOFF(ki_tpgid), UINT,
> PIDFMT, 0},
> {"tsid", "TSID", NULL, 0, kvar, NULL, PIDLEN, KOFF(ki_tsid), UINT,
> @@ -211,8 +213,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},
> + {"usertime", "USERTIME", NULL, USER|DSIZ, usertime, s_usertime, 15, 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},
>
> Modified: head/bin/ps/print.c
> ==============================================================================
> --- head/bin/ps/print.c Thu Mar 24 19:50:34 2011 (r219971)
> +++ head/bin/ps/print.c Thu Mar 24 20:15:42 2011 (r219972)
> @@ -570,11 +570,20 @@ printtime(KINFO *k, VARENT *ve, long sec
> secs += psecs / 100;
> psecs = psecs % 100;
> }
> - (void)snprintf(obuff, sizeof(obuff), "%3ld:%02ld%c%02ld",
> + (void)snprintf(obuff, sizeof(obuff), "%ld:%02ld%c%02ld",
> secs / 60, secs % 60, decimal_point, psecs);
> (void)printf("%*s", v->width, obuff);
> }
>
> +static int
> +sizetime(long secs)
> +{
> +
> + if (secs < 60)
> + return (7);
> + return (log10(secs / 60) + 7);
> +}
> +
> void
> cputime(KINFO *k, VARENT *ve)
> {
> @@ -930,6 +939,17 @@ s_comm(KINFO *k)
> }
>
> int
> +s_cputime(KINFO *k)
> +{
> + long secs;
> +
> + secs = k->ki_p->ki_runtime / 1000000;
> + if (sumrusage)
> + secs += k->ki_p->ki_childtime.tv_sec;
> + return (sizetime(secs));
> +}
> +
> +int
> s_label(KINFO *k)
> {
> char *string = NULL;
> @@ -975,3 +995,25 @@ s_logname(KINFO *k)
>
> return (strlen(s));
> }
> +
> +int
> +s_systime(KINFO *k)
> +{
> + long secs;
> +
> + secs = k->ki_p->ki_rusage.ru_stime.tv_sec;
> + if (sumrusage)
> + secs += k->ki_p->ki_childstime.tv_sec;
> + return (sizetime(secs));
> +}
> +
> +int
> +s_usertime(KINFO *k)
> +{
> + long secs;
> +
> + secs = k->ki_p->ki_rusage.ru_utime.tv_sec;
> + if (sumrusage)
> + secs += k->ki_p->ki_childutime.tv_sec;
> + return (sizetime(secs));
> +}
--
a13x
More information about the svn-src-head
mailing list