Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Mar 2011 20:27:35 +0000
From:      Alexander Best <arundel@freebsd.org>
To:        Edward Tomasz Napierala <trasz@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r219972 - head/bin/ps
Message-ID:  <20110324202735.GA79089@freebsd.org>
In-Reply-To: <201103242015.p2OKFgjL056208@svn.freebsd.org>
References:  <201103242015.p2OKFgjL056208@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110324202735.GA79089>