Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

GNU ps supports BSD-style options, UNIX-style options, and GNU long options. Is using one of these types (in scripts and at the command line) preferred over the others?

I get the impression from the manpage that the functionality of the option styles does not overlap completely.

share|improve this question
up vote 2 down vote accepted

Generally speaking just use the set of options that gives you the results you want.

For the sake of (other people's) sanity & portability I suggest sticking with BSD-style or SysV-style arguments -- for the most part modern systems accept both of those argument sets, and that way when the script you wrote to solve a problem on Linux gets dropped onto a system that doesn't understand GNU-style long options it still works (all the world is not a Linux machine).

share|improve this answer

Is using one of these types (in scripts and at the command line) preferred over the others?

This largely depends on the target platforms your scripts should run on. If your scripts should run only on Linux go with the GNU-style options, if they should also be usable on *BSD go with the BSD-style options and last but not least if they should run on a wide range of unixoid systems (e. g. Solaris) go with the UNIX-style options.

share|improve this answer
Seriously? The GNU-style options are the long options. – Jim Hunziker May 11 '10 at 14:23

Whatever POSIX says. I'm not up to stuff on this, but I would guess scripts using ps won't be very portable anyway.

share|improve this answer
+1 for "scripts using ps won't be very portable". – l0b0 Oct 7 '12 at 8:00

I think you will find the POSIX or SVR4 options are far more common.

I generally parse uname output, and select the correct /bin/ps, /usr/bin/ps and arguments based on that value. On unsupported platforms, I just exit, I don't guess. On linux, I set $PS_PERSONALITY to "posix" and unset $I_WANT_A_BROKEN_PS in case a user has that set for some reason. This is just a defensive measure.

The GNU getopt_long() style is useful only on Linux, and even if that's what you're going for, people are far more familiar with the short options.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.