--- /dev/null
+This is what POSIX 2003 says about ps:
+
+By default, ps shall select all processes with the same effective user
+ID as the current user and the same controlling terminal as the invoker
+
+ps [-aA][-defl][-G grouplist][-o format]...[-p proclist][-t termlist]
+[-U userlist][-g grouplist][-n namelist][-u userlist]
+
+-a Write information for all processes associated with terminals.
+ Implementations may omit session leaders from this list.
+
+-A Write information for all processes.
+
+-d Write information for all processes, except session leaders.
+
+-e Write information for all processes. (Equivalent to -A.)
+
+-f Generate a full listing. (See the STDOUT section for the con-
+ tents of a full listing.)
+
+-g grouplist
+ Write information for processes whose session leaders are given
+ in grouplist. The application shall ensure that the grouplist is
+ a single argument in the form of a <blank> or comma-separated
+ list.
+
+-G grouplist
+ Write information for processes whose real group ID numbers are
+ given in grouplist. The application shall ensure that the grou-
+ plist is a single argument in the form of a <blank> or comma-
+ separated list.
+
+-l Generate a long listing. (See STDOUT for the contents of a long
+ listing.)
+
+-n namelist
+ Specify the name of an alternative system namelist file in place
+ of the default. The name of the default file and the format of a
+ namelist file are unspecified.
+
+-o format
+ Write information according to the format specification given in
+ format. Multiple -o options can be specified; the format speci-
+ fication shall be interpreted as the <space>-separated concate-
+ nation of all the format option-arguments.
+
+-p proclist
+ Write information for processes whose process ID numbers are
+ given in proclist. The application shall ensure that the pro-
+ clist is a single argument in the form of a <blank> or comma-
+ separated list.
+
+-t termlist
+ Write information for processes associated with terminals given
+ in termlist. The application shall ensure that the termlist is a
+ single argument in the form of a <blank> or comma-separated
+ list. Terminal identifiers shall be given in an implementation-
+ defined format. On XSI-conformant systems, they shall be
+ given in one of two forms: the device's filename (for example,
+ tty04) or, if the device's filename starts with tty, just the
+ identifier following the characters tty (for example, "04" ).
+
+-u userlist
+ Write information for processes whose user ID numbers or login
+ names are given in userlist. The application shall ensure that
+ the userlist is a single argument in the form of a <blank> or
+ comma-separated list. In the listing, the numerical user ID
+ shall be written unless the -f option is used, in which case the
+ login name shall be written.
+
+-U userlist
+ Write information for processes whose real user ID numbers or
+ login names are given in userlist. The application shall ensure
+ that the userlist is a single argument in the form of a <blank>
+ or comma-separated list.
+
+With the exception of -o format, all of the options shown are used to
+select processes. If any are specified, the default list shall be
+ignored and ps shall select the processes represented by the inclusive
+OR of all the selection-criteria options.
+
+The -o option allows the output format to be specified under user con-
+trol.
+
+The application shall ensure that the format specification is a list of
+names presented as a single argument, <blank> or comma-separated. Each
+variable has a default header. The default header can be overridden by
+appending an equals sign and the new text of the header. The rest of
+the characters in the argument shall be used as the header text. The
+fields specified shall be written in the order specified on the command
+line, and should be arranged in columns in the output. The field widths
+shall be selected by the system to be at least as wide as the header
+text (default or overridden value). If the header text is null, such as
+-o user=, the field width shall be at least as wide as the default
+header text. If all header text fields are null, no header line shall
+be written.
+
+ruser The real user ID of the process. This shall be the textual user
+ ID, if it can be obtained and the field width permits, or a dec-
+ imal representation otherwise.
+
+user The effective user ID of the process. This shall be the textual
+ user ID, if it can be obtained and the field width permits, or a
+ decimal representation otherwise.
+
+rgroup The real group ID of the process. This shall be the textual
+ group ID, if it can be obtained and the field width permits, or
+ a decimal representation otherwise.
+
+group The effective group ID of the process. This shall be the textual
+ group ID, if it can be obtained and the field width permits, or
+ a decimal representation otherwise.
+
+pid The decimal value of the process ID.
+
+ppid The decimal value of the parent process ID.
+
+pgid The decimal value of the process group ID.
+
+pcpu The ratio of CPU time used recently to CPU time available in the
+ same period, expressed as a percentage. The meaning of
+ "recently" in this context is unspecified. The CPU time avail-
+ able is determined in an unspecified manner.
+
+vsz The size of the process in (virtual) memory in 1024 byte units
+ as a decimal integer.
+
+nice The decimal value of the nice value of the process; see nice() .
+
+etime In the POSIX locale, the elapsed time since the process was
+ started, in the form: [[dd-]hh:]mm:ss
+
+time In the POSIX locale, the cumulative CPU time of the process in
+ the form: [dd-]hh:mm:ss
+
+tty The name of the controlling terminal of the process (if any) in
+ the same format used by the who utility.
+
+comm The name of the command being executed ( argv[0] value) as a
+ string.
+
+args The command with all its arguments as a string. The implementa-
+ tion may truncate this value to the field width; it is implemen-
+ tation-defined whether any further truncation occurs. It is
+ unspecified whether the string represented is a version of the
+ argument list as it was passed to the command when it started,
+ or is a version of the arguments as they may have been modified
+ by the application. Applications cannot depend on being able to
+ modify their argument list and having that modification be
+ reflected in the output of ps.
+
+Any field need not be meaningful in all implementations. In such a case
+a hyphen ( '-' ) should be output in place of the field value.
+
+Only comm and args shall be allowed to contain <blank>s; all others
+shall not.
+
+The following table specifies the default header to be used in the
+POSIX locale corresponding to each format specifier.
+
+ Format Specifier Default Header Format Specifier Default Header
+ args COMMAND ppid PPID
+ comm COMMAND rgroup RGROUP
+ etime ELAPSED ruser RUSER
+ group GROUP time TIME
+ nice NI tty TT
+ pcpu %CPU user USER
+ pgid PGID vsz VSZ
+ pid PID
+
+There is no special quoting mechanism for header text. The header text
+is the rest of the argument. If multiple header changes are needed,
+multiple -o options can be used, such as:
+
+ ps -o "user=User Name" -o pid=Process\ ID