1This is what POSIX 2003 says about ps:
2
3By default, ps shall select  all processes with the same effective user
4ID as the current user and the same controlling terminal as the invoker
5
6ps [-aA][-defl][-G grouplist][-o format]...[-p proclist][-t termlist]
7[-U userlist][-g grouplist][-n namelist][-u userlist]
8
9-a     Write information for all processes associated  with  terminals.
10       Implementations may omit session leaders from this list.
11
12-A     Write information for all processes.
13
14-d     Write information for all processes, except session leaders.
15
16-e     Write information for all processes.  (Equivalent to -A.)
17
18-f     Generate  a  full  listing. (See the STDOUT section for the con-
19       tents of a full listing.)
20
21-g  grouplist
22       Write information for processes whose session leaders are  given
23       in grouplist. The application shall ensure that the grouplist is
24       a single argument in the form of a  <blank>  or  comma-separated
25       list.
26
27-G  grouplist
28       Write  information for processes whose real group ID numbers are
29       given in grouplist. The application shall ensure that the  grou-
30       plist  is  a  single argument in the form of a <blank> or comma-
31       separated list.
32
33-l     Generate a long listing. (See STDOUT for the contents of a  long
34       listing.)
35
36-n  namelist
37       Specify the name of an alternative system namelist file in place
38       of the default. The name of the default file and the format of a
39       namelist file are unspecified.
40
41-o  format
42       Write information according to the format specification given in
43       format.  Multiple -o options can be specified; the format speci-
44       fication shall be interpreted as the  <space>-separated concate-
45       nation of all the format option-arguments.
46
47-p  proclist
48       Write  information  for  processes  whose process ID numbers are
49       given in proclist. The application shall ensure  that  the  pro-
50       clist  is  a  single argument in the form of a <blank> or comma-
51       separated list.
52
53-t  termlist
54       Write information for processes associated with terminals  given
55       in termlist. The application shall ensure that the termlist is a
56       single argument in the form  of  a  <blank>  or  comma-separated
57       list.  Terminal identifiers shall be given in an implementation-
58       defined format.    On  XSI-conformant  systems,  they  shall  be
59       given  in  one of two forms: the device's filename (for example,
60       tty04) or, if the device's filename starts with  tty,  just  the
61       identifier following the characters tty (for example, "04" ).
62
63-u  userlist
64       Write  information  for processes whose user ID numbers or login
65       names are given in userlist. The application shall  ensure  that
66       the  userlist  is  a single argument in the form of a <blank> or
67       comma-separated list. In the  listing,  the  numerical  user  ID
68       shall be written unless the -f option is used, in which case the
69       login name shall be written.
70
71-U  userlist
72       Write information for processes whose real user  ID  numbers  or
73       login  names are given in userlist. The application shall ensure
74       that the userlist is a single argument in the form of a  <blank>
75       or comma-separated list.
76
77With  the  exception of -o format, all of the options shown are used to
78select processes. If any are  specified,  the  default  list  shall  be
79ignored  and ps shall select the processes represented by the inclusive
80OR of all the selection-criteria options.
81
82The  -o option allows the output format to be specified under user con-
83trol.
84
85The application shall ensure that the format specification is a list of
86names  presented as a single argument, <blank> or comma-separated. Each
87variable has a default header. The default header can be overridden  by
88appending  an  equals  sign and the new text of the header. The rest of
89the characters in the argument shall be used as the  header  text.  The
90fields specified shall be written in the order specified on the command
91line, and should be arranged in columns in the output. The field widths
92shall  be  selected  by the system to be at least as wide as the header
93text (default or overridden value). If the header text is null, such as
94-o  user=,  the  field  width  shall be at least as wide as the default
95header text. If all header text fields are null, no header  line  shall
96be written.
97
98ruser  The  real user ID of the process. This shall be the textual user
99       ID, if it can be obtained and the field width permits, or a dec-
100       imal representation otherwise.
101
102user   The  effective user ID of the process. This shall be the textual
103       user ID, if it can be obtained and the field width permits, or a
104       decimal representation otherwise.
105
106rgroup The  real  group  ID  of  the process. This shall be the textual
107       group ID, if it can be obtained and the field width permits,  or
108       a decimal representation otherwise.
109
110group  The effective group ID of the process. This shall be the textual
111       group ID, if it can be obtained and the field width permits,  or
112       a decimal representation otherwise.
113
114pid    The decimal value of the process ID.
115
116ppid   The decimal value of the parent process ID.
117
118pgid   The decimal value of the process group ID.
119
120pcpu   The ratio of CPU time used recently to CPU time available in the
121       same  period,  expressed  as  a  percentage.  The   meaning   of
122       "recently"  in  this context is unspecified. The CPU time avail-
123       able is determined in an unspecified manner.
124
125vsz    The size of the process in (virtual) memory in 1024  byte  units
126       as a decimal integer.
127
128nice   The decimal value of the nice value of the process; see nice() .
129
130etime  In the POSIX locale, the elapsed  time  since  the  process  was
131       started, in the form: [[dd-]hh:]mm:ss
132
133time   In the POSIX locale, the cumulative CPU time of the  process  in
134       the form: [dd-]hh:mm:ss
135
136tty    The name of the controlling terminal of the process (if any)  in
137       the same format used by the who utility.
138
139comm   The  name  of  the  command being executed ( argv[0] value) as a
140       string.
141
142args   The command with all its arguments as a string. The  implementa-
143       tion may truncate this value to the field width; it is implemen-
144       tation-defined whether any  further  truncation  occurs.  It  is
145       unspecified  whether  the string represented is a version of the
146       argument list as it was passed to the command when  it  started,
147       or  is a version of the arguments as they may have been modified
148       by the application. Applications cannot depend on being able  to
149       modify  their  argument  list  and  having  that modification be
150       reflected in the output of ps.
151
152Any field need not be meaningful in all implementations. In such a case
153a hyphen ( '-' ) should be output in place of the field value.
154
155Only  comm  and  args  shall be allowed to contain <blank>s; all others
156shall not.
157
158The following table specifies the default header  to  be  used  in  the
159POSIX locale corresponding to each format specifier.
160
161    Format Specifier Default Header Format Specifier Default Header
162    args             COMMAND        ppid             PPID
163    comm             COMMAND        rgroup           RGROUP
164    etime            ELAPSED        ruser            RUSER
165    group            GROUP          time             TIME
166    nice             NI             tty              TT
167    pcpu             %CPU           user             USER
168    pgid             PGID           vsz              VSZ
169    pid              PID
170
171There  is no special quoting mechanism for header text. The header text
172is the rest of the argument. If multiple  header  changes  are  needed,
173multiple -o options can be used, such as:
174
175        ps -o "user=User Name" -o pid=Process\ ID
176