Change to "kludge option processing" in /bin/ps

Jilles Tjoelker jilles+fbsd-arch at stack.nl
Fri May 28 08:52:24 PDT 2004


On Sun, May 23, 2004 at 10:58:23PM -0400, Garance A Drosihn wrote:
> After staring at the kludge-option processing in `ps' for awhile, I
> found enough edge-cases where it simply did not work "right" (for my
> definition of "right", at keast...), so I rewrote it. As part of that,
> I also removed the ancient "BACKWARD_COMPATIBILITY" compile-time
> option, where:
>      ps -options arg1 arg2
> (with no '-' on "arg1" and "arg2") was treated as:
>     ps -options -N arg1 -M arg2

> I did this because I have often been puzzled/annoyed when I type:
>     ps 12
> to get process 12, and then realize I wanted it shown in a
> different format so I type:
>     ps -u 12

What you should use is 'ps u12' :)
That also works on old (pre-Reno) BSD ps, and it's shorter too.
It doesn't work on Solaris /usr/ucb/ps, but my ps shell function takes
care of that (for me).

> and I get a completely different list of processes, or I type:
>     ps 12 34
> and I only see process 12, or I type
>     ps 12 34 56
> and get the error message:
>     ps: 56: No such file or directory
> This BACKWARD_COMPATIBILITY is not documented in the usage()
> or the man page, so I'd like to replace it.

Note that netstat(1) has similar backward compatibility, and gdb -k uses
the same order (namelist then memory).

You're right that this is rather confusing.

> So, I changed `ps' to check for any additional arguments after
> processing all '-'-options, and if those start with a digit then
> `ps' will try to use the entire argument as a pid or pidlist.
> If an extra argument does not start with a digit, then `ps' just
> prints an error and exits.

> I want to do more testing on this before committing, but I thought
> that all this was enough of a change that I should also give people
> a chance to scream before I commit it.  Also, I'm not sure if I
> might have clobbered some subtle aspect of the kludge processing.

> If anyone wants to try the update, it is available at:

> http://people.freebsd.org/~gad/ps-kludge.diff

> [disclaimer: at the moment it's only had about 15 minutes of
> testing, but I *think* this is about the way I want it to work]

> Assuming there aren't any major objections to these ideas, I plan
> to do some more testing on this and commit it next weekend.

Unfortunately, I can't try it out because I don't have access to a very
recent -CURRENT.

What's the deeper purpose of the `optlist' argument for
`kludge_oldps_options' if it's always set to PS_ARGS?

I have some doubts on whether `ps t' instead of `ps T' should still be
supported, since `ps t p0' doesn't work because of it. You could only
change 't' to 'T' when there are no more arguments.

Am I right that `ps U0' is equivalent to `ps -U0' with the patch? (This
wasn't really much of an issue before `-U' accepted uids instead of
names.)

What happens when you do `ps 1,2,3,4'? And `ps uww0,1'? Or even
`ps "v1 $$"'?

All this complexity makes me think of not using getopt(3), as Albert
Cahalan suggested :)

-- 
Jilles Tjoelker


More information about the freebsd-arch mailing list