Autosizing column widths in ps(1).

Edward Tomasz Napierała trasz at freebsd.org
Wed Jul 27 07:40:11 UTC 2011


Wiadomość napisana przez Alexander Best w dniu 25 lip 2011, o godz. 00:22:
> On Sun Jul 24 11, Edward Tomasz Napiera?a wrote:
>> Wiadomo?? napisana przez Test Rat w dniu 22 lip 2011, o godz. 19:21:
>>> Edward Tomasz Napiera?a <trasz at freebsd.org> writes:
>>> 
>>>> Patch below changes ps(1) to automatically size column widths according to their
>>>> contents.  From the user point of view, it prevents breaking layout with too wide values
>>>> and in most cases makes output narrower.  From the developer point of view, it removes
>>>> the need to specify widths.  Testing is welcome - the patch shouldn't change ps(1)
>>>> behaviour except slightly changing the widths, but the code changes are pretty large
>>>> and it's quite possible I've missed something.
>>> 
>>> STAT column seems to be right-aligned when it was previously left-aligned.
>>> This makes sorting it harder, e.g.
>>> 
>>> $ ps ax | (IFS=; read h; echo $h; sort -k3) | less
>> 
>> Good catch, thanks!  Updated patch, which also fixes two issues affecting TTY column,
>> is at http://people.freebsd.org/~trasz/ps-9.diff.
> 
> working great here. have you experienced any performance issues, due to ps
> having to iterate through all columns before constructing the output in
> comparison to the previous design?

It had to iterate through them before; what has changed is that now it stores the strings
before printing them out.  This means increased memory usage - if you have thousands
of processes, the new ps(1) will use tens of kilobytes of memory.  Hardly
a showstopper, imho.

> P.S.: one utility which would also benefit from auto column sizing is top, for
> sure! ;)

The problem with top(1) is that you don't want your column widths to change
at every refresh.  This is somewhat similar to the situation with vmstat(8).

--
If you cut off my head, what would I say?  Me and my head, or me and my body?



More information about the freebsd-hackers mailing list