]> granicus.if.org Git - procps-ng/commitdiff
string.h and maybe a release
authoralbert <>
Tue, 10 Aug 2004 04:30:27 +0000 (04:30 +0000)
committeralbert <>
Tue, 10 Aug 2004 04:30:27 +0000 (04:30 +0000)
NEWS
proc/pwcache.c
ps/ps.1

diff --git a/NEWS b/NEWS
index ed3958276777d0e346e9191d45c19d56413578c7..4e3cd08f6937c356661364bd1aa55a34bafade22 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ avoid warning about -lncurses when not linking (more)
 new names for shared libraries (packagers: watch out!)
 "make install" no longer rebuilds everything
 wchan now '*' for multi-threaded processes
+ps: new man page -- thanks Nicolas Francois
+ps: STAT shows l for multi-threaded processes
 vmstat: some overflow problems fixed -- thanks Holger Kiehl
 sysctl: man page fix
 
index 41694c17211b3ef63b600048fa9eb92c4aeea284..77e6619d96d4414bc46f88b39f04f975f2332239 100644 (file)
@@ -8,6 +8,7 @@
 // See file COPYING for information on distribution conditions.
 
 #include <stdio.h>
+#include <string.h>
 #include <sys/types.h>
 #include <stdlib.h>
 #include <pwd.h>
diff --git a/ps/ps.1 b/ps/ps.1
index 6cb9d43d9e01575bb75d93fb052fe86f805c2b21..3e2b8236c1b6971ac5a50d298101c04c7219d2fd 100644 (file)
--- a/ps/ps.1
+++ b/ps/ps.1
+'\" t
+.\" (The preceding line is a note to broken versions of man to tell
 .\" Man page for ps.
 .\" Quick hack conversion by Albert Cahalan, 1998.
 .\" Licensed under version 2 of the Gnu General Public License.
 .\"
-.\" This man page is a horrid hack because *roff sucks.
-.\" The whole system is way obsolete. The internal header
-.\" stuff must die, and will when I figure out how to kill it.
-.\" I've already killed the wasteful left margin and screwy
-.\" old perfect justification. Gross! You'd think someone
-.\" invented this crap in 1973. Oh yeah, they did. Sorry.
+.TH PS 1 "July 28, 2004" "Linux" "Linux User's Manual"
+.SH NAME
+ps \- report a snapshot of the current processes.
 .\"
-.TH PS 1 "July 5, 1998" "Linux" "Linux User's Manual"
-.SH \fRNAME\fR
-ps \- report process status
-.ad r
+.\" To render this page:
+.\"    groff -t -b -man -X -P-resolution -P100 -Tps nicolas-ps.1 &
+.\"    groff -t -b -man -X -TX100 nicolas-ps.1 &
+.\"    tbl ps.1 | troff -Ww -man -z
+.\"    groff -t -man -Tps ps.1 | ps2pdf - - > ps.pdf
+.\"
+.\" The '70s called. They want their perfect justification,
+.\" hyphenation, and double-spaced sentences back.
 .na
-.ss 12 0
-.in 0
 .nh
-.nf
-
-SYNOPSIS
-ps [options]
-
-
-DESCRIPTION
-ps gives a snapshot of the current processes. If you want
-a repetitive update of this status, use top. This man
-page documents the /proc-based version of ps, or tries to.
-
-
-COMMAND-LINE OPTIONS
-
-This version of ps accepts several kinds of options.
-
-Unix options may be grouped and must be preceeded by a dash.
-BSD options may be grouped and must not be used with a dash.
-Gnu long options are preceeded by two dashes.
-
-Options of different types may be freely mixed.
-
-Set the I_WANT_A_BROKEN_PS environment variable to force BSD syntax even
-when options are preceeded by a dash. The PS_PERSONALITY environment
-variable (described below) provides more detailed control of ps behavior.
-
-SIMPLE PROCESS SELECTION
--A           select all processes
--N           negate selection
--a           select all with a tty except session leaders
--d           select all, but omit session leaders
--e           select all processes
-T            select all processes on this terminal
-a            select all processes on a terminal, including those of other users
-g            really all, even group leaders (does nothing w/o SunOS settings)
-r            restrict output to running processes
-x            select processes without controlling ttys
---deselect   negate selection
-
-PROCESS SELECTION BY LIST
--C           select by command name
--G           select by RGID (supports names)
--U           select by RUID (supports names)
--g           select by session leader OR by group name
--p           select by PID
--s           select processes belonging to the sessions given
--t           select by tty
--u           select by effective user ID (supports names)
-U            select processes for specified users
-p            select by process ID
-t            select by tty
---Group      select by real group name or ID
---User       select by real user name or ID
---group      select by effective group name or ID
---pid        select by process ID
---ppid       select by parent process ID
---sid        select by session ID
---tty        select by terminal
---user       select by effective user name or ID
--123         implied --sid
-123          implied --pid
-
-OUTPUT FORMAT CONTROL
--O           is preloaded "-o"
--F           extra full format
--M           add column for security data
--c           different scheduler info for -l option
--f           does full listing
--j           jobs format
--l           long format
--o           user-defined format
--y           do not show flags; show rss in place of addr
-O            is preloaded "o" (overloaded)
-X            old Linux i386 register format
-Z            add column for security data
-j            job control format
-l            display long format
-o            specify user-defined format
-s            display signal format
-u            display user-oriented format
-v            display virtual memory format
---format     user-defined format
---context    display security context format (NSA SELinux, etc.)
-
-OUTPUT MODIFIERS
--H           show process hierarchy (forest)
--n           set namelist file
--w           wide output
-C            use raw CPU time for %CPU instead of decaying average
-N            specify namelist file
-O            sorting order (overloaded)
-S            include some dead child process data (as a sum with the parent)
-c            true command name
-e            show environment after the command
-f            ASCII-art process hierarchy (forest)
-h            no header (or, one header per screen in the BSD personality)
-n            numeric output for WCHAN and USER
-w            wide output
---cols       set screen width
---columns    set screen width
---cumulative include some dead child process data (as a sum with the parent)
---forest     ASCII art process tree
---headers    repeat header lines, one per page of output
---no-headers print no header line at all
---lines      set screen height
---rows       set screen height
---sort       specify sorting order
---width      set screen width
-
-THREAD DISPLAY
--L           show threads, possibly with LWP and NLWP columns
--T           show threads, possibly with SPID column
--m           show threads after processes
-H            show threads as if they were processes
-m            show threads after processes
-
-INFORMATION
--V          print version
-L           list all format specifiers
-V           show version info
---help      print help message
---info      print debugging info
---version   print version
-
-OBSOLETE
-A           increases the argument space (DecUnix)
-M           use alternate core (try -n or N instead)
-W           get swap info from ... not /dev/drum (try -n or N instead)
-k           use /vmcore as c-dumpfile (try -n or N instead)
-
-
-
-NOTES
-
-User-defined format options ("o", "-o", "O", and "-O") offer
-a way to specify individual output columns. Headers may be
-renamed ("ps -o pid,ruser=RealUser -o comm=Command") as desired.
-If all column headers are empty ("ps -o pid= -o comm=") then the
+.if n .ss 12 0
+.\"
+.\" See /usr/share/groff/current/tmac/an-old.tmac for what these do.
+.\" Setting them to zero provides extra space, but only do that for
+.\" plain text output. PostScript and such will remain indented.
+.if n .nr IN 0n
+.if n .nr an-prevailing-indent 0n
+.\"
+.\"
+.\" ColSize is used for the format spec table.
+.\" It's the left margin, minus the right, minus
+.\" the space needed for the 1st two columns.
+.\" Making it messy: inches, ens, points, scaled points...
+.\"
+.nr ColSize ((\n(.lu-\n(.iu/\n(.Hu-20u)n)
+.\"
+.\" This is for command options
+.nr OptSize (16u)
+.\"
+.\" l=\n(.l
+.\" i=\n(.i
+.\" o=\n(.o
+.\" H=\n(.H
+.\" s=\n(.s
+.\" ColSize=\n[ColSize]
+.\" 
+.\" Macro for easy option formatting:   .opt \-x
+.de opt              
+.  TP \\n[OptSize]
+.  BI \\$*
+..
+.\"
+.SH SYNOPSIS
+\fBps\fR [\fIoptions\fR]
+.PP
+.PP
+.SH DESCRIPTION
+.B ps
+displays information about a selection of the active processes.
+If you want a repetitive update of the selection and the
+displayed information, use\ \fItop\fR(1) instead.
+.P
+By default, \fBps\fR selects all processes with the same effective user
+ID (EUID) as the curent user and associated with the same terminal as the
+invoker.  It displays the process ID (PID), the terminal (tty) associated
+with the process (TTY), the cumulated CPU time in [dd\-]hh:mm:ss format
+(TIME), and the executable name (CMD). The use of BSD\-style options
+will add process state (STAT) to the default display. The use of BSD\-style
+options will also change the process selection to include processes
+on other terminals (TTYs) that are owned by you; alternately, this may
+be described as setting the selection to be the set of all processes
+filtered to exclude processes owned by other users or not on a terminal.
+Output is unsorted by default.
+.P
+Except as described below, process selection options are additive.
+The default selection is discarded, and then the selected processes
+are added to the set of processes to be displayed.
+A\ process will thus be shown if it meets any of the selection
+criteria.
+.PP
+.PP
+.SH "COMMAND\-LINE OPTIONS"
+This version of \fBps\fR accepts several kinds of options:
+.PD 0
+.IP 1 4
+UNIX options, which may be grouped and must be preceeded by a dash.
+.IP 2 4
+BSD options, which may be grouped and must not be used with a dash.
+.IP 3 4
+GNU long options, which are preceeded by two dashes.
+.PD
+.PP
+Options of different types may be freely mixed, but conflicts can appear.
+There are some synonomous options, which are functionally identical, due
+to the many standards and \fBps\fR implementations that this \fBps\fR is
+compatible with.
+.P
+Note that "\fBps\ \-aux\fR" is distinct from "\fBps\ aux\fR".
+The POSIX and UNIX standards require that "\fBps\ \-aux\fR" print all
+processes owned by a user named "x", as well as printing all processes
+that would be selected by the \fB\-a\fR option. If the user named "x" does
+not exist, this \fBps\fR may interpret the command as "\fBps\ aux\fR"
+instead and print a warning. This behavior is intended to aid in
+transitioning old scripts and habits. It is fragile, subject to change,
+and thus should not be relied upon.
+.PP
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.SH "EXAMPLES"
+.TP 3
+To see every process on the system using standard syntax:
+.B ps\ \-e
+.br
+.B ps\ \-ef
+.br
+.B ps\ \-eF
+.br
+.B ps\ \-ely
+.TP
+To see every process on the system using BSD syntax:
+.B ps\ ax
+.br
+.B ps\ axu
+.TP
+To print a process tree:
+.B ps\ -ejH
+.br
+.B ps\ axjf
+.TP
+To get info about threads:
+.B ps\ -eLf
+.br
+.B ps\ axms
+.TP
+To get security info:
+.B ps\ -eo euser,ruser,suser,fuser,f,comm,label
+.br
+.B ps\ axZ
+.br
+.B ps\ -eM
+.TP
+To see every process except those running as root (real\ &\ effective\ ID)
+.B ps\ \-U\ root\ \-u\ root\ \-N
+.TP
+To see every process with a user\-defined format:
+.B ps\ \-eo\ pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
+.br
+.B ps\ axo\ stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
+.br
+.B ps\ \-eopid,tt,user,fname,tmout,f,wchan
+.TP
+Odd display with AIX field descriptors:
+.B ps\ \-o\ "%u\ :\ %U\ :\ %p\ :\ %a"
+.TP
+Print only the process IDs of syslogd:
+.B ps\ \-C\ syslogd\ \-o\ pid=
+.TP
+Print only the name of PID 42:
+.B ps\ \-p\ 42\ \-o\ comm=
+.PP
+.PP
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.SH "SIMPLE PROCESS SELECTION"
+.TP \n[OptSize]
+.B \-A
+Select all processes.  Identical to \fB\-e\fR.
+
+.TP
+.B \-N
+Select all processes except those that fulfill the specified conditions.
+
+.opt T
+Select all processes associated with this terminal.  Identical to the
+\fBt\fR option without any argument.
+
+.TP
+.B \-a
+Select all processes except session leaders (see \fIgetsid\fR(2)) and
+processes not associated with a terminal.
+
+.TP
+.B a
+Lift the BSD\-style "only yourself" restriction, which is imposed upon
+the set of all processes when some BSD\-style (without\ "\-") options
+are used or when the \fBps\fR personality setting is BSD\-like.
+The set of processes selected in this manner is
+in addition to the set of processes selected by other means.
+An alternate description is that this option causes \fBps\fR to
+list all processes with a terminal (tty), or to list all processes
+when used together with the \fBx\fR option.
+
+.TP
+.B \-d
+Select all processes except session leaders.
+
+.TP
+.B \-e
+Select all processes.  Identical to \fB\-A\fR.
+
+.\" Current "g" behavior: add in the session leaders, which would
+.\" be excluded in the sunos4 personality. Supposed "g" behavior:
+.\" add in the group leaders -- at least according to the SunOS 4
+.\" man page on the FreeBSD site. Uh oh. I think I had tested SunOS
+.\" though, so maybe the code is correct.
+.TP
+.B g
+Really all, even session leaders.  This flag is obsolete and may be
+discontinued in a future release. It is normally implied by the \fBa\fR flag,
+and is only useful when operating in the sunos4 personality.
+
+.TP
+.B r
+Restrict the selection to only running processes.
+
+.TP
+.B x
+Lift the BSD\-style "must have a tty" restriction, which is imposed upon
+the set of all processes when
+some BSD\-style options are used or when the \fBps\fR personality
+setting is BSD\-like. The set of processes selected in this manner is
+in addition to the set of processes selected by other means.
+An alternate description is that this option causes \fBps\fR to
+list all processes owned by you (same EUID as \fBps\fR),
+or to list all processes when used together with the \fBa\fR option.
+
+.TP
+.B \-\-deselect
+Select all processes except those that fulfill the specified conditions.
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH "PROCESS SELECTION BY LIST"
+These options accept a single argument in the form of a blank\-separated
+or comma\-separated list.  They can be used multiple times.
+For\ example:\ \fBps\ \-p\ "1\ 2"\ \-p\ 3,4\fR
+.P
+.TP \n[OptSize]
+.BI \-C \ cmdlist
+Select by command name.
+.br
+This selects the processes whose executable name is given in
+\fIcmdlist\fR.
+
+.TP
+.BI \-G \ grplist
+Select by real group ID (RGID) or name.
+.br
+This selects the processes whose real group name or ID is in the
+\fIgrplist\fR list.  The real group ID identifies the group of the user
+who created the process, see \fIgetgid\fR(2).
+
+.TP
+.BI U \ userlist
+Select by effective user ID (EUID) or name.
+.br
+This selects the processes whose effective user name
+or ID is in \fIuserlist\fR.
+The effective user\ ID describes the user whose file
+access permissions are used by the process
+(see\ \fIgeteuid\fR(2)).
+Identical to \fB\-u\fR and\ \fB\-\-user\fR.
+
+.TP
+.BI \-U \ userlist
+select by real user ID (RUID) or name.
+.br
+It selects the processes whose real user name or ID is in the
+\fIuserlist\fR list.
+The real user ID identifies the user who created the process,
+see\ \fIgetuid\fR(2).
+
+.TP
+.BI \-g \ grplist
+Select by session OR by effective group name.
+.br
+Selection by session is specified by many standards,
+but selection by effective group is the logical behavior that
+several other operating systems use.
+This \fBps\fR will select by session when the list
+is completely numeric (as\ sessions\ are).
+Group ID numbers will work only when some group names are also specified.
+See the \fB\-s\fR and \fB\-\-group\fR options.
+
+.TP
+.BI p \ pidlist
+Select by process ID.  Identical to \fB\-p\fR and\ \fB\-\-pid\fR.
+
+.TP
+.BI \-p \ pidlist
+Select by PID.
+.br
+This selects the processes whose process ID numbers appear in
+\fIpidlist\fR.  Identical to \fBp\fR and\ \fB\-\-pid\fR.
+
+.TP
+.BI \-s \ sesslist
+Select by session ID.
+.br
+This selects the processes
+with a session ID specified in\ \fIsesslist\fR.
+
+.TP
+.BI t \ ttylist
+Select by tty.  Nearly identical to \fB\-t\fR and \fB\-\-tty\fR,
+but can also be used with an empty \fIttylist\fR to indicate
+the terminal associated with \fBps\fR.
+Using the \fBT\fR option is considered cleaner than using \fBT\fR with
+an\ empty\ \fIttylist\fR.
+
+.TP
+.BI \-t \ ttylist
+Select by tty.
+.br
+This selects the processes associated with the terminals
+given in \fIttylist\fR.
+Terminals (ttys, or screens for text output) can be specified in several
+forms: /dev/ttyS1, ttyS1, S1.
+A\ plain "\-" may be used to select processes not attached to any terminal.
+
+.TP
+.BI \-u \ userlist
+Select by effective user ID (EUID) or name.
+.br
+This selects the processes whose effective user name or ID is in
+\fIuserlist\fR.  The effective user ID describes the user whose file
+access permissions are used by the process (see\ \fIgeteuid\fR(2)).
+Identical to \fBU\fR and \fB\-\-user\fR.
+
+.TP
+.BI \-\-Group \ grplist
+Select by real group ID (RGID) or name.  Identical to \fB\-G\fR.
+
+.TP
+.BI \-\-User \ userlist
+Select by real user ID (RUID) or name.  Identical to \fB\-U\fR.
+
+.TP
+.BI \-\-group \ grplist
+Select by effective group ID (EGID) or name.
+.br
+This selects the processes whose effective group name or ID is in
+\fIgrouplist\fR.  The effective group ID describes the group whose file
+access permissions are used by the process (see\ \fIgeteuid\fR(2)).
+The \fB\-g\fR option is often an alternative to\ \fB\-\-group\fR.
+
+.TP
+.BI \-\-pid \ pidlist
+Select by process\ ID.  Identical to \fB\-p\fR\ and\ \fBp\fR.
+
+.TP
+.BI \-\-ppid \ pidlist
+Select by parent process\ ID.
+This selects the processes
+with a parent\ process\ ID in \fRpidlist\fR.
+That\ is, it selects processes that are children
+of those listed in \fRpidlist\fR.
+
+.TP
+.BI \-\-sid \ sesslist
+Select by session\ ID.  Identical to\ \fB\-s\fR.
+
+.TP
+.BI \-\-tty \ ttylist
+Select by terminal.  Identical to \fB\-t\fR and\ \fBt\fR.
+
+.TP
+.BI \-\-user \ userlist
+Select by effective user ID (EUID) or name.
+Identical to \fB\-u\fR and\ \fBU\fR.
+
+.TP
+\fB\-\fI123\fR
+Identical to \fB\-\-sid\ \fI123\fR.
+
+.TP
+.B \fI123\fR
+Identical to \fB\-\-pid\ \fI123\fR.
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH "OUTPUT FORMAT CONTROL"
+These options are used to choose the information displayed by \fBps\fR.
+The output may differ by personality.
+.PP
+
+.TP \n[OptSize]
+.B \-F
+extra full format. See the \fB\-f\fR option, which \fB\-F\fR implies.
+
+.TP
+.BI \-O \ format
+is like \fB\-o\fR, but preloaded with some default columns.
+Identical to \fB\-o\ pid,\fIformat\fB,state,tname,time,command\fR
+or \fB\-o\ pid,\fIformat\fB,tname,time,cmd\fR, see\ \fB\-o\fR\ below.
+
+.TP
+.BI O \ format
+is preloaded \fBo\fR (overloaded).
+.br
+The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
+format with some common fields predefined) or can be used to specify
+sort order.  Heuristics are used to determine the behavior of this
+option. To ensure that the desired behavior is obtained (sorting or
+formatting), specify the option in some other way
+(e.g. with \fB\-O\fR or \fB\-\-sort\fR).
+When used as a formatting option, it is identical to \fB\-O\fR, with the
+BSD\ personality.
+
+.TP
+.B \-M
+Add a column of security data. (for\ SE\ Linux)
+
+.TP
+.B X
+Register format.
+
+.TP
+.B Z
+Add a column of security data. (for\ SE\ Linux)
+
+.TP
+.B \-c
+Show different scheduler information for the \fB\-l\fR option.
+
+.TP
+.B \-f
+does full\-format listing. This option can be combined with many
+other UNIX\-style options to add additional columns. It also causes
+the command arguments to be printed. When used with \fB\-L\fR, the
+NLWP (number of threads) and LWP (thread ID) columns will be added.
+
+.TP
+.B j
+BSD job control format.
+
+.TP
+.B \-j
+jobs format
+
+.TP
+.B l
+display BSD long format.
+
+.TP
+.B \-l
+long format. The \fB\-y\fR option is often useful with this.
+
+.TP
+.BI o \ format
+specify user\-defined format.  Identical to \fB\-o\fR and
+\fB\-\-format\fR.
+
+.TP
+.BI \-o \ format
+user\-defined format.
+.br
+\fIformat\fR is a single argument in the form of a
+blank\-separated or comma\-separated list, which offers
+a way to specify individual output columns.
+The recognized keywords are described in the \fBSTANDARD FORMAT
+SPECIFIERS\fR section below.
+Headers may be
+renamed (\fBps\ \-o\ pid,ruser=RealUser\ \-o\ comm=Command\fR) as desired.
+If all column headers are empty (\fBps\ \-o\ pid=\ \-o\ comm=\fR) then the
 header line will not be output. Column width will increase as
 needed for wide headers; this may be used to widen up columns
-such as WCHAN ("ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm").
-Explicit width control ("ps opid,wchan:42,cmd") is offered too.
-The behavior of "ps -o pid=X,comm=Y" varies with personality;
+such as WCHAN (\fBps\ \-o\ pid,wchan=WIDE\-WCHAN\-COLUMN\ \-o\ comm\fR).
+Explicit width control (\fBps\ opid,wchan:42,cmd\fR) is offered too.
+The behavior of \fBps\ \-o\ pid=X,comm=Y\fR varies with personality;
 output may be one column named "X,comm=Y" or two columns
-named "X" and "Y". Use multiple -o options when in doubt.
-Use the $PS_FORMAT environment variable to specify a default
+named "X" and "Y". Use multiple \fB\-o\fR options when in doubt.
+Use the \fBPS_FORMAT\fR environment variable to specify a default
 as desired; DefSysV and DefBSD are macros that may be used to
 choose the default UNIX or BSD columns.
 
-The following user-defined format specifiers may contain
-spaces: comm, args, cmd, comm, command, fname, ucmd, ucomm,
-lstart, bsdstart, start
-
-The "-g" option can select by session leader OR by group name.
-Selection by session leader is specified by many standards,
-but selection by group is the logical behavior that several other
-operating systems use. This ps will select by session leader when
-the list is completely numeric (as sessions are). Group ID numbers
-will work only when some group names are also specified.
-
-The "m" option should not be used. Use "-m" or "-o" with a list.
-("m" displays memory info, shows threads, or sorts by memory use)
-
-The "h" option is problematic.  Standard BSD ps uses the option to
-print a header on each page of output, but older Linux ps uses the option
-to totally disable the header.  This version of ps follows the Linux
-usage of not printing the header unless the BSD personality has been
-selected, in which case it prints a header on each page of output.
-Regardless of the current personality, you can use the long options
---headers and --no-headers to enable printing headers each page and
+.TP
+.B s
+display signal format
+
+.TP
+.B u
+display user\-oriented format
+
+.TP
+.B v
+display virtual memory format
+
+.TP
+.B \-y
+Do not show flags; show rss in place of addr.
+This option can only be used with \fB\-l\fR.
+
+.TP
+.BI \-\-format \ format
+user\-defined format.  Identical to \fB\-o\fR and \fBo\fR.
+
+.TP
+.B \-\-context
+Display security context format. (for\ SE\ Linux)
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH "OUTPUT MODIFIERS"
+
+.\"  .TP
+.\"  .B C
+.\"  use raw CPU time for %CPU instead of decaying average
+
+.TP \n[OptSize]
+.B \-H
+show process hierarchy (forest)
+
+.TP
+.BI N \ namelist
+Specify namelist file.  Identical to \fB\-n\fR, see \fB\-n\fR above.
+
+.TP
+.BI O \ order
+Sorting order. (overloaded)
+.br
+The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
+format with some common fields predefined) or can be used to specify
+sort order.  Heuristics are used to determine the behavior of this
+option. To ensure that the desired behavior is obtained (sorting or
+formatting), specify the option in some other way (e.g. with \fB\-O\fR
+or \fB\-\-sort\fR).
+
+For sorting, obsolete BSD \fBO\fR option syntax is
+\fBO\fR[\fB+\fR|\fB\-\fR]\fIk1\fR[,[\fB+\fR|\fB\-\fR]\fIk2\fR[,...]].
+It orders the processes listing according to the multilevel sort specified by
+the sequence of one\-letter short keys \fIk1\fR, \fIk2\fR, ... described
+in the \fBOBSOLETE SORT KEYS\fR section below.
+The\ "+" is currently optional,
+merely re\-iterating the default direction on a key,
+but may help to distinguish an \fBO\fR sort from an \fBO\fR format.
+The\ "\-" reverses direction only on the key it precedes.
+
+.TP
+.B S
+Sum up some information, such as CPU usage, from dead child processes
+into their parent. This is useful for examining a system where a
+parent process repeatedly forks off short\-lived children to do work.
+
+.TP
+.B c
+Show the true command name. This is derived from the name of the
+executable file, rather than from the argv value which could be
+modified by a user. Command arguments are not shown.
+
+.TP
+.B e
+Show the environment after the command.
+
+.TP
+.B f
+ASCII\-art process hierarchy (forest)
+
+.TP
+.B h
+No header. (or, one header per screen in the BSD personality)
+.br
+The \fBh\fR option is problematic.  Standard BSD \fBps\fR uses
+this option to print a header on each page of output, but older
+Linux \fBps\fR uses this option to totally disable the header.
+This version of \fBps\fR follows the Linux usage of not printing
+the header unless the BSD personality has been selected, in which
+case it prints a header on each page of output. Regardless of the
+current personality, you can use the long options \fB\-\-headers\fR
+and \fB\-\-no\-headers\fR to enable printing headers each page or
 disable headers entirely, respectively.
 
-Terminals (ttys, or screens for text output) can be specified in several
-forms: /dev/ttyS1, ttyS1, S1. Obsolete "ps t" (your own terminal) and
-"ps t?" (processes without a terminal) syntax is supported, but modern
-options ("T", "-t" with list, "x", "t" with list) should be used instead.
-
-The BSD "O" option can act like "-O" (user-defined output format with
-some common fields predefined) or can be used to specify sort order.
-Heuristics are used to determine the behavior of this option. To ensure
-that the desired behavior is obtained, specify the other option (sorting
-or formatting) in some other way.
-
-For sorting, obsolete BSD "O" option syntax is O[+|-]k1[,[+|-]k2[,...]]
-Order the process listing according to the multilevel sort specified by
-the sequence of short keys from SORT KEYS, k1, k2, ... The `+' is quite
-optional, merely re-iterating the default direction on a key. `-' reverses
-direction only on the key it precedes. The O option must be the last option
-in a single command argument, but specifications in successive arguments are
-catenated.
-
-Gnu sorting syntax is --sortX[+|-]key[,[+|-]key[,...]]
-Choose a multi-letter key from the SORT KEYS section. X may be any
-convenient separator character. To be GNU-ish use `='. The `+' is really
-optional since default direction is increasing numerical or lexicographic
-order. For example, ps jax --sort=uid,-ppid,+pid
-
-This ps works by reading the virtual files in /proc. This ps does not
-need to be suid kmem or have any privileges to run. Do not give this ps
-any special permissions.
-
-This ps needs access to a namelist file for proper WCHAN display.
-The namelist file must match the current Linux kernel exactly for
-correct output.
-
-To produce the WCHAN field, ps needs to read the System.map file created
-when the kernel is compiled. The search path is:
-
-$PS_SYSTEM_MAP
-/boot/System.map-`uname -r`
-/boot/System.map
-/lib/modules/`uname -r`/System.map
-/usr/src/linux/System.map
-
-The member used_math of task_struct is not shown, since crt0.s checks
-to see if math is present. This causes the math flag to be set for all
-processes, and so it is worthless. (Somebody fix libc or the kernel please)
+.TP
+.BI k \ spec
+specify sorting order. Sorting syntax is
+[\fB+\fR|\fB\-\fR]\fIkey\fR[,[\fB+\fR|\fB\-\fR]\fIkey\fR[,...]]
+Choose a multi\-letter key from the \fBSTANDARD FORMAT SPECIFIERS\fR section.
+The\ "+" is optional since default direction is increasing numerical or
+lexicographic order. Identical to \fB\-\-sort\fR. Examples:
+.br
+\fBps\ jaxkuid,\-ppid,+pid\fR
+.br
+\fBps\ axk\ comm\ o\ comm,args\fR
+.br
+\fBps\ kstart_time\ \-ef\fR
+
+.TP
+.BI \-n \ namelist
+set namelist file.  Identical to \fBN\fR.
+.br
+The namelist file is needed for a proper WCHAN display, and must match
+the current Linux kernel exactly for correct output.
+Without this option, the default search path for the namelist is:
+
+       $PS_SYSMAP
+.br
+       $PS_SYSTEM_MAP
+.br
+       /proc/*/wchan
+.br
+       /boot/System.map\-\`uname\ \-r\`
+.br
+       /boot/System.map
+.br
+       /lib/modules/\`uname\ \-r\`/System.map
+.br
+       /usr/src/linux/System.map
+.br
+       /System.map
+
+.TP
+.B n
+Numeric output for WCHAN and USER. (including all types of UID and GID)
+
+.TP
+.B \-w
+Wide output. Use this option twice for unlimited width.
+
+.TP
+.B w
+Wide output. Use this option twice for unlimited width.
+
+.TP
+.BI \-\-cols \ n
+set screen width
+
+.TP
+.BI \-\-columns \ n
+set screen width
+
+.TP
+.B \-\-cumulative
+include some dead child process data (as a sum with the parent)
+
+.TP
+.B \-\-forest
+ASCII art process tree
+
+.TP
+.B \-\-headers
+repeat header lines, one per page of output
+
+.TP
+.B \-\-no\-headers
+print no header line at all
+
+.TP
+.BI \-\-lines \ n
+set screen height
+
+.TP
+.BI \-\-rows \ n
+set screen height
+
+.TP
+.BI \-\-sort \ spec
+specify sorting order. Sorting syntax is
+[\fB+\fR|\fB\-\fR]\fIkey\fR[,[\fB+\fR|\fB\-\fR]\fIkey\fR[,...]]
+Choose a multi\-letter key from the \fBSTANDARD FORMAT SPECIFIERS\fR section.
+The\ "+" is optional since default direction is increasing numerical or
+lexicographic order. Identical to\ \fBk\fR.
+For example: \fBps\ jax\ \-\-sort=uid,\-ppid,+pid\fR
+
+.TP
+.BI \-\-width \ n
+set screen width
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH "THREAD DISPLAY"
+.PD 0
+
+.TP \n[OptSize]
+.B H
+Show threads as if they were processes
+
+.TP
+.B \-L
+Show threads, possibly with LWP and NLWP columns
+
+.TP
+.B \-T
+Show threads, possibly with SPID column
+
+.TP
+.B m
+Show threads after processes
+
+.TP
+.B \-m
+Show threads after processes
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH "OTHER INFORMATION"
+.PD 0
+
+.TP \n[OptSize]
+.B L
+List all format specifiers.
+
+.TP
+.B \-V
+Print the procps version.
+
+.TP
+.B V
+Print the procps version.
+
+.TP
+.B \-\-help
+Print a help message.
+
+.TP
+.B \-\-info
+Print debugging info.
+
+.TP
+.B \-\-version
+Print the procps version.
+
+.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+.PD
+.PP
+.SH NOTES
+This \fBps\fR works by reading the virtual files in\ /proc.
+This \fBps\fR does not need to be setuid kmem or have any privileges to run.
+Do not give this \fBps\fR any special permissions.
+
+This \fBps\fR needs access to namelist data for proper WCHAN display.
+For kernels prior to 2.6, the System.map file must be installed.
+
+CPU usage is currently expressed as the percentage of time spent
+running during the entire lifetime of a process.
+This is not ideal, and\ it does not conform to the
+standards that \fBps\fR otherwise conforms\ to.
+CPU\ usage is unlikely to add up to exactly\ 100%.
 
 Programs swapped out to disk will be shown without command line arguments,
-and unless the c option is given, in brackets.
+and unless the \fBc\fR option is given,
+in\ brackets.
 
-%CPU shows the cputime/realtime percentage. It will not add up to 100%
-unless you are lucky. It is time used divided by the time the process has
-been running.
+The SIZE and RSS fields don't count some parts of a process including the
+page tables, kernel stack, struct thread_info, and struct task_struct.
+This is usually at least 20\ KiB of memory that is always resident.
+SIZE is the virtual size of the process (code+data+stack).
 
-The SIZE and RSS fields don't count the page tables and the task_struct of a
-proc; this is at least 12k of memory that is always resident. SIZE is the
-virtual size of the proc (code+data+stack).
-
-Processes marked <defunct> are dead processes (so-called "zombies") that
+Processes marked <defunct> are dead processes (so\-called\ "zombies") that
 remain because their parent has not destroyed them properly. These processes
-will be destroyed by init(8) if the parent process exits.
-
-
-PROCESS FLAGS
-
-FORKNOEXEC   1    forked but didn't exec
-SUPERPRIV    4    used super-user privileges
-
-
-PROCESS STATE CODES
-
-D uninterruptible sleep (usually IO)
-R runnable (on run queue)
-S sleeping
-T traced or stopped
-W paging (2.4 kernels and older only)
-X dead
-Z a defunct ("zombie") process
-
-For BSD formats and when the "stat" keyword is used, additional
+will be destroyed by \fIinit\fR(8) if the parent process exits.
+
+
+.SH "PROCESS FLAGS"
+The sum of these values is displayed in the "F" column,
+which is provided by the \fBflags\fR output specifier.
+.PD 0
+.TP 5
+1
+forked but didn't exec
+.TP
+4
+used super\-user privileges
+.PD
+.PP
+.SH "PROCESS STATE CODES"
+Here are the different values that the \fBs\fR, \fBstat\fR and
+\fBstate\fR output specifiers (header\ "STAT"\ or\ "S") will display to
+describe the state of a process.
+.PD 0
+.TP 5
+D
+Uninterruptible sleep (usually\ IO)
+.TP
+R
+Running or runnable (on\ run\ queue)
+.TP
+S
+Interruptible sleep (waiting for an event to complete)
+.TP
+T
+Stopped, either by a job control signal or because it is being traced.
+.TP
+W
+paging (not valid since the 2.6.xx kernel)
+.TP
+X
+dead (should never be seen)
+.TP
+Z
+Defunct ("zombie") process, terminated but not reaped by its parent.
+.PD
+.PP
+For BSD formats and when the \fBstat\fR keyword is used, additional
 characters may be displayed:
-
-< high-priority task
-N low-priority task
-L has pages locked into memory (for real-time and custom IO)
-s is a session leader
-+ is in the foreground process group
-
-SORT KEYS
-
-Note that the values used in sorting are the internal values ps uses and not
-the `cooked' values used in some of the output format fields. Pipe ps
-output into the sort(1) command if you want to sort the cooked values.
-
-KEY LONG       DESCRIPTION
-c   cmd        simple name of executable
-C   cmdline    full command line
-f   flags      flags as in long format F field
-g   pgrp       process group ID
-G   tpgid      controlling tty process group ID
-j   cutime     cumulative user time
-J   cstime     cumulative system time
-k   utime      user time
-K   stime      system time
-m   min_flt    number of minor page faults
-M   maj_flt    number of major page faults
-n   cmin_flt   cumulative minor page faults
-N   cmaj_flt   cumulative major page faults
-o   session    session ID
-p   pid        process ID
-P   ppid       parent process ID
-r   rss        resident set size
-R   resident   resident pages
-s   size       memory size in kilobytes
-S   share      amount of shared pages
-t   tty        the minor device number of tty
-T   start_time time process was started
-U   uid        user ID number
-u   user       user name
-v   vsize      total VM size in kB
-y   priority   kernel scheduling priority
-
-
-AIX FORMAT DESCRIPTORS
-
-This ps supports AIX format descriptors, which work somewhat like the
-formatting codes of printf(1) and printf(3). For example, the normal
-default output can be produced with this:   ps -eo "%p %y %x %c"
-
-CODE  NORMAL    HEADER
-%C    pcpu      %CPU
-%G    group     GROUP
-%P    ppid      PPID
-%U    user      USER
-%a    args      COMMAND
-%c    comm      COMMAND
-%g    rgroup    RGROUP
-%n    nice      NI
-%p    pid       PID
-%r    pgid      PGID
-%t    etime     ELAPSED
-%u    ruser     RUSER
-%x    time      TIME
-%y    tty       TTY
-%z    vsz       VSZ
-
-
-STANDARD FORMAT SPECIFIERS
-
-These may be used to control both output format and sorting.
-For example:  ps -eo pid,user,args --sort user
-
-CODE         HEADER
-%cpu         %CPU    
-%mem         %MEM    
-alarm        ALARM   
-args         COMMAND 
-blocked      BLOCKED 
-bsdstart     START   
-bsdtime      TIME    
-c            C       
-caught       CAUGHT  
-cmd          CMD     
-comm         COMMAND 
-command      COMMAND 
-context             CONTEXT
-cputime      TIME    
-drs          DRS     
-dsiz         DSIZ    
-egid         EGID    
-egroup       EGROUP  
-eip          EIP     
-esp          ESP     
-etime        ELAPSED 
-euid         EUID    
-euser        EUSER   
-f            F       
-fgid         FGID    
-fgroup       FGROUP  
-flag         F       
-flags        F       
-fname        COMMAND 
-fsgid        FSGID   
-fsgroup      FSGROUP 
-fsuid        FSUID   
-fsuser       FSUSER  
-fuid         FUID    
-fuser        FUSER   
-gid          GID     
-group        GROUP   
-ignored      IGNORED 
-intpri       PRI     
-lim          LIM     
-longtname    TTY     
-lstart       STARTED 
-m_drs        DRS     
-m_trs        TRS     
-maj_flt      MAJFL   
-majflt       MAJFLT  
-min_flt      MINFL   
-minflt       MINFLT  
-ni           NI      
-nice         NI      
-nwchan       WCHAN   
-opri         PRI     
-pagein       PAGEIN  
-pcpu         %CPU    
-pending      PENDING 
-pgid         PGID    
-pgrp         PGRP    
-pid          PID     
-pmem         %MEM    
-ppid         PPID    
-pri          PRI     
-priority     PRI     
-rgid         RGID    
-rgroup       RGROUP  
-rss          RSS     
-rssize       RSS     
-rsz          RSZ     
-ruid         RUID    
-ruser        RUSER   
-s            S       
-sess         SESS    
-session      SESS    
-sgi_p        P       
-sgi_rss      RSS     
-sgid         SGID    
-sgroup       SGROUP  
-sid          SID     
-sig          PENDING 
-sig_block    BLOCKED 
-sig_catch    CATCHED 
-sig_ignore   IGNORED 
-sig_pend     SIGNAL  
-sigcatch     CAUGHT  
-sigignore    IGNORED 
-sigmask      BLOCKED 
-stackp       STACKP  
-start        STARTED 
-start_stack  STACKP  
-start_time   START   
-stat         STAT    
-state        S       
-stime        STIME   
-suid         SUID    
-suser        SUSER   
-svgid        SVGID   
-svgroup      SVGROUP 
-svuid        SVUID   
-svuser       SVUSER  
-sz           SZ      
-time         TIME    
-timeout      TMOUT   
-tmout        TMOUT   
-tname        TTY     
-tpgid        TPGID   
-trs          TRS     
-trss         TRSS    
-tsiz         TSIZ    
-tt           TT      
-tty          TT      
-tty4         TTY     
-tty8         TTY     
-ucmd         CMD     
-ucomm        COMMAND 
-uid          UID     
-uid_hack     UID     
-uname        USER    
-user         USER    
-vsize        VSZ     
-vsz          VSZ     
-wchan        WCHAN   
-
-
-
-
-ENVIRONMENT VARIABLES
-The following environment variables could affect ps:
-    COLUMNS             Override default display width.
-    LINES               Override default display height.
-    PS_PERSONALITY      Set to one of posix,old,linux,bsd,sun,digital...
-    CMD_ENV             Set to one of posix,old,linux,bsd,sun,digital...
-    I_WANT_A_BROKEN_PS  Force obsolete command line interpretation.
-    LC_TIME             Date format.
-    PS_COLORS           Not currently supported.
-    PS_FORMAT           Default output format override.
-    PS_SYSMAP           Default namelist (System.map) location.
-    PS_SYSTEM_MAP       Default namelist (System.map) location.
-    POSIXLY_CORRECT     Don't find excuses to ignore bad "features".
-    UNIX95              Don't find excuses to ignore bad "features".
-    _XPG                Cancel CMD_ENV=irix non-standard behavior.
-
-In general, it is a bad idea to set these variables. The one exception
-is CMD_ENV or PS_PERSONALITY, which could be set to Linux for normal
-systems. Without that setting, ps follows the useless and bad parts
-of the Unix98 standard.
-
-
-PERSONALITY
-    390      like the S/390 OpenEdition ps
-    aix      like AIX ps
-    bsd      like FreeBSD ps (totally non-standard)
-    compaq   like Digital Unix ps
-    debian   like the old Debian ps
-    digital  like Digital Unix ps
-    gnu      like the old Debian ps
-    hp       like HP-UX ps
-    hpux     like HP-UX ps
-    irix     like Irix ps
-    linux    ***** RECOMMENDED *****
-    old      like the original Linux ps (totally non-standard)
-    posix    standard
-    sco      like SCO ps
-    sgi      like Irix ps
-    sun      like SunOS 4 ps (totally non-standard)
-    sunos    like SunOS 4 ps (totally non-standard)
-    sysv     standard
-    unix     standard
-    unix95   standard
-    unix98   standard
-
-
-EXAMPLES
-To see every process on the system using standard syntax:
-    ps -e
-To see every process on the system using BSD syntax:
-    ps ax
-To see every process except those running as root (real & effective ID)
-    ps -U root -u root -N
-To see every process with a user-defined format:
-    ps -eo pid,tt,user,fname,tmout,f,wchan
-Odd display with AIX field descriptors:
-    ps -o "%u : %U : %p : %a"
-Print only the process IDs of syslogd:
-    ps -C syslogd -o pid=
-
-SEE ALSO
-top(1) pgrep(1) pstree(1) proc(5)
-
-STANDARDS
-This ps conforms to version 2 of the Single Unix Specification.
-
-AUTHOR
-ps was originally written by Branko Lankester <lankeste@fwi.uva.nl>. Michael
-K. Johnson <johnsonm@redhat.com> re-wrote it significantly to use the proc
+.PD 0
+.TP 5
+<
+high\-priority (not nice to other users)
+.TP
+N
+low\-priority (nice to other users)
+.TP
+L
+has pages locked into memory (for real\-time and custom\ IO)
+.TP
+s
+is a session leader
+.TP
+l
+is multi-threaded (using CLONE_THREAD, like NPTL pthreads\ do)
+.TP
++
+is in the foreground process group
+.PD
+.PP
+.PP
+.SH "OBSOLETE SORT KEYS"
+These keys are used by the BSD \fBO\fR option (when it is used for
+sorting).  The GNU \fB\-\-sort\fR option doesn't use these keys, but the
+specifiers described below in the \fBSTANDARD FORMAT SPECIFIERS\fR
+section. Note that the values used in sorting are the internal
+values \fBps\fR uses and not the "cooked" values used in some of
+the output format fields (e.g. sorting on tty will sort into
+device number, not according to the terminal name displayed).
+Pipe \fBps\fR output into the \fIsort\fR(1) command if you want
+to sort the cooked values.
+
+.TS
+l l lw(3i).
+\fBKEY LONG    DESCRIPTION\fR
+c      cmd     simple name of executable
+C      pcpu    cpu utilization
+f      flags   flags as in long format F field
+g      pgrp    process group ID
+G      tpgid   controlling tty process group ID
+j      cutime  cumulative user time
+J      cstime  cumulative system time
+k      utime   user time
+m      min_flt number of minor page faults
+M      maj_flt number of major page faults
+n      cmin_flt        cumulative minor page faults
+N      cmaj_flt        cumulative major page faults
+o      session session ID
+p      pid     process ID
+P      ppid    parent process ID
+r      rss     resident set size
+R      resident        resident pages
+s      size    memory size in kilobytes
+S      share   amount of shared pages
+t      tty     the device number of the controling tty
+T      start_time      time process was started
+U      uid     user ID number
+u      user    user name
+v      vsize   total VM size in kB
+y      priority        kernel scheduling priority
+.\"K   stime   system time (conflict, system vs. start time)
+.TE
+.PP
+.PP
+.SH "AIX FORMAT DESCRIPTORS"
+This \fBps\fR supports AIX format descriptors, which work somewhat like the
+formatting codes of \fIprintf\fR(1) and \fIprintf\fR(3). For example, the normal
+default output can be produced with this:  \fBps\ \-eo\ "%p\ %y\ %x\ %c"\fR.
+The\ \fBNORMAL\fR codes are described in the next section.
+.TS
+l l l.
+\fBCODE        NORMAL  HEADER\fR
+%C     pcpu    %CPU
+%G     group   GROUP
+%P     ppid    PPID
+%U     user    USER
+%a     args    COMMAND
+%c     comm    COMMAND
+%g     rgroup  RGROUP
+%n     nice    NI
+%p     pid     PID
+%r     pgid    PGID
+%t     etime   ELAPSED
+%u     ruser   RUSER
+%x     time    TIME
+%y     tty     TTY
+%z     vsz     VSZ
+.TE
+
+.SH "STANDARD FORMAT SPECIFIERS"
+Here are the different keywords that may be used to control the output
+format (e.g. with option \fB\-o\fR) or to sort the selected processes
+with the GNU\-style \fB\-\-sort\fR option.
+
+For example:  \fBps\ \-eo\ pid,user,args\ \-\-sort\ user\fR
+
+This version of \fBps\fR tries to recognize most of the keywords used in
+other implementations of \fBps\fR.
+
+The following user\-defined format specifiers may contain
+spaces: \fBargs\fR, \fBcmd\fR, \fBcomm\fR, \fBcommand\fR, \fBfname\fR,
+\fBucmd\fR, \fBucomm\fR,
+\fBlstart\fR, \fBbsdstart\fR, \fBstart\fR.
+
+Some keywords may not be available for sorting.
+
+.\" #######################################################################
+.\" lB1 lB1 lB1 lB1 s s s
+.\" lB1 l1  l1  l1  s s s.
+.\"
+.\" lB1 lB1 lBw(5.5i)
+.\" lB1 l1  l.
+.\"
+.TS
+expand;
+lB1 lB1 lBw(\n[ColSize]n)
+lB1 l1  l.
+CODE   HEADER  DESCRIPTION
+
+%cpu   %CPU    T{
+cpu utilization of the process in "##.#" format.  It is the CPU time
+used divided by the time the process has been running (cputime/realtime
+ratio), expressed as a percentage. It will not add up to 100% unless you
+are lucky.  (alias\ \fBpcpu\fR).
+T}
+
+%mem   %MEM    T{
+ratio of the process's resident set size  to the physical memory on
+the machine, expressed as a percentage.  (alias\ \fBpmem\fR).
+T}
+
+args   COMMAND T{
+command with all its arguments as a string.  May chop as desired.
+Modifications to the arguments are not shown.  The output in this column
+may contain spaces.  (alias\ \fBcmd\fR,\ \fBcommand\fR).
+T}
+
+blocked        BLOCKED T{
+mask of the blocked signals, see \fIsignal\fR(7).
+According to the width of the field,
+a\ 32\-bit or 64\-bit mask in hexadecimal format is displayed.
+(alias\ \fBsig_block\fR,\ \fBsigmask\fR).
+T}
+
+bsdstart       START   T{
+time the command started.  If the process was started less
+than 24 hours ago, the output format is "\ HH:MM",
+else it is "mmm\ dd"
+(where mmm is the three letters of the month).
+T}
+
+bsdtime        TIME    T{
+accumulated cpu time, user\ +\ system.  The display format is usualy
+"MMM:SS", but can be shifted to the right if the process used more than 999
+minutes of cpu time.
+T}
+
+c      C       T{
+integer value of the processor utilisation percentage.  (see\ \fB%cpu\fR).
+T}
+
+caught CAUGHT  T{
+mask of the caught signals, see \fIsignal\fR(7).  According to the
+width of the field, a 32 or 64 bits mask in hexadecimal format is
+displayed.  (alias\ \fBsig_catch\fR,\ \fBsigcatch\fR).
+T}
+
+class  CLS     T{
+scheduling class of the process.  (alias\ \fBpolicy\fR,\ \fBcls\fR).
+Field's possible values are:
+.br
+\-     not reported
+.br
+TS     SCHED_OTHER
+.br
+FF     SCHED_FIFO
+.br
+RR     SCHED_RR
+.br
+?      unknown value
+T}
+
+cls    CLS     T{
+scheduling class of the process.  (alias\ \fBpolicy\fR,\ \fBclass\fR).
+Field's possible values are:
+.br
+\-     not reported
+.br
+TS     SCHED_OTHER
+.br
+FF     SCHED_FIFO
+.br
+RR     SCHED_RR
+.br
+?      unknown value
+T}
+
+cmd    CMD     T{
+see \fBargs\fR.  (alias\ \fBargs\fR,\ \fBcommand\fR).
+T}
+
+comm   COMMAND T{
+command name (only\ the executable\ name).  The output in this
+column may contain spaces.  (alias\ \fBucmd\fR,\ \fBucomm\fR).
+T}
+
+command        COMMAND T{
+see \fBargs\fR.  (alias\ \fBargs\fR,\ \fBcmd\fR).
+T}
+
+cp     CP      T{
+per\-mill CPU usage.  (see\ \fB%cpu\fR).
+T}
+
+cputime        TIME    T{
+cumulative CPU time, "[dd\-]hh:mm:ss" format.  (alias\ \fBtime\fR).
+T}
+
+egid   EGID    T{
+effective group ID number of the process as a decimal integer.
+(alias\ \fBgid\fR).
+T}
+
+egroup EGROUP  T{
+effective group ID of the process.  This will be the textual group ID,
+if it can be obtained and the field width permits, or a decimal
+representation otherwise.  (alias\ \fBgroup\fR).
+T}
+
+eip    EIP     T{
+instruction pointer.
+T}
+
+esp    ESP     T{
+stack pointer.
+T}
+
+etime  ELAPSED T{
+elapsed time since the process was started,
+in\ the form\ [[dd\-]hh:]mm:ss.
+T}
+
+euid   EUID    T{
+effective user\ ID. (alias\ \fBuid\fR).
+T}
+
+euser  EUSER   T{
+effective user\ name.  This will be the textual
+user\ ID, if\ it can be obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+The\ \fBn\fR\ option can be used
+to force the decimal representation.
+(alias\ \fBuname\fR,\ \fBuser\fR).
+T}
+
+f      F       T{
+flags associated with the process, see the \fBPROCESS FLAGS\fR section.
+(alias\ \fBflag\fR,\ \fBflags\fR).
+T}
+
+fgid   FGID    T{
+filesystem access group\ ID.  (alias\ \fBfsgid\fR).
+T}
+
+fgroup FGROUP  T{
+filesystem access group\ ID.
+This will be the textual user\ ID, if\ it can be obtained
+and the field width permits,
+or\ a\ decimal representation otherwise.
+(alias\ \fBfsgroup\fR).
+T}
+
+flag   F       T{
+see\ \fBf\fR.  (alias\ \fBf\fR,\ \fBflags\fR).
+T}
+
+flags  F       T{
+see\ \fBf\fR.  (alias\ \fBf\fR,\ \fBflag\fR).
+T}
+
+fname  COMMAND T{
+first 8 bytes of the base name of the process's executable file.
+The output in this column may contain spaces.
+T}
+
+fuid   FUID    T{
+filesystem access user\ ID.  (alias\ \fBfsuid\fR).
+T}
+
+fuser  FUSER   T{
+filesystem access user\ ID.  This will be the textual user\ ID,
+if\ it can be obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+T}
+
+gid    GID     T{
+see\ \fBegid\fR.  (alias\ \fBegid\fR).
+T}
+
+group  GROUP   T{
+see\ \fBegroup\fR.  (alias\ \fBegroup\fR).
+T}
+
+ignored        IGNORED T{
+mask of the ignored signals, see \fIsignal\fR(7).  According to the
+width of the field, a\ 32\-bit or 64\-bit mask in hexadecimal format
+is displayed.  (alias \fBsig_ignore\fR, \fBsigignore\fR).
+T}
+
+label  LABEL   T{
+security label, most commonly used for SE\ Linux context data.
+This is for the \fIMandatory Access Control\fR ("MAC") found on
+high\-security systems.
+T}
+
+lstart STARTED T{
+time the command started.
+T}
+
+lwp    LWP     T{
+lwp (light weight process, or thread) ID of the lwp being reported.
+(alias\ \fBspid\fR,\ \fBtid\fR).
+T}
+
+ni     NI      T{
+nice value. This ranges from 19 (nicest) to \-20 (not\ nice to\ others),
+see\ \fInice\fR(1).  (alias\ \fBnice\fR).
+T}
+
+nice   NI      T{
+see\ \fBni\fR.  (alias\ \fBni\fR).
+T}
+
+nlwp   NLWP    T{
+number of lwps (threads) in the process.  (alias\ \fBthcount\fR).
+T}
+
+nwchan WCHAN   T{
+address of the kernel function where the process is sleeping
+(use \fBwchan\fR if you want the kernel function name).
+Running tasks will display a dash ('\-') in this column.
+T}
+
+pcpu   %CPU    T{
+see\ \fB%cpu\fR.  (alias\ \fB%cpu\fR).
+T}
+
+pending        PENDING T{
+mask of the pending signals. See\ \fIsignal\fR(7).  Signals pending on
+the process are distinct from signals pending on individual threads.
+Use the \fBm\fR option or the \fB\-m\fR option to see both.
+According to the width of the field, a\ 32\-bit or 64\-bit mask in
+hexadecimal format is displayed.  (alias\ \fBsig\fR).
+T}
+
+pgid   PGID    T{
+process group\ ID or, equivalently, the process\ ID of the
+process group leader.  (alias\ \fBpgrp\fR).
+T}
+
+pgrp   PGRP    T{
+see\ \fBpgid\fR.  (alias\ \fBpgid\fR).
+T}
+
+pid    PID     T{
+process\ ID number of the process.
+T}
+
+pmem   %MEM    T{
+see\ \fB%mem\fR.  (alias\ \fB%mem\fR).
+T}
+
+policy POL     T{
+scheduling class of the process.  (alias\ \fBclass\fR,\ \fBcls\fR).
+Possible values are:
+.br
+\-     not reported
+.br
+TS     SCHED_OTHER
+.br
+FF     SCHED_FIFO
+.br
+RR     SCHED_RR
+.br
+?      unknown value
+T}
+
+ppid   PPID    T{
+parent process ID.
+T}
+
+psr    PSR     T{
+processor that process is currently assigned to.
+T}
+
+rgid   RGID    T{
+real group ID.
+T}
+
+rgroup RGROUP  T{
+real group name.  This will be the textual group\ ID, if\ it can be
+obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+T}
+
+rss    RSS     T{
+resident set size, the non\-swapped physical memory that
+a task has used (in\ kiloBytes).
+(alias\ \fBrssize\fR,\ \fBrsz\fR).
+T}
+
+rssize RSS     T{
+see\ \fBrss\fR.  (alias\ \fBrss\fR,\ \fBrsz\fR).
+T}
+
+rsz    RSZ     T{
+see\ \fBrss\fR.  (alias\ \fBrss\fR,\ \fBrssize\fR).
+T}
+
+rtprio RTPRIO  T{
+realtime priority.
+T}
+
+ruid   RUID    T{
+real user\ ID.
+T}
+
+ruser  RUSER   T{
+real user\ ID.  This will be the textual user\ ID,
+if\ it can be obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+T}
+
+s      S       T{
+minimal state display (one\ character).
+See\ section \fBPROCESS STATE CODES\fR for the different values.
+See\ also \fBstat\fR if you want additionnal
+information displayed.  (alias\ \fBstate\fR).
+T}
+
+sched  SCH     T{
+scheduling policy of the process.  The policies sched_other, sched_fifo,
+and sched_rr are respectively displayed as 0,\ 1,\ and\ 2.
+T}
+
+sess   SESS    T{
+session\ ID or, equivalently, the process\ ID of the session\ leader.
+(alias\ \fBsession\fR,\ \fBsid\fR).
+T}
+
+sgi_p  P       T{
+processor that the process is currently executing on.
+Displays "*" if the process is not currently running or runnable.
+T}
+
+sgid   SGID    T{
+saved group\ ID.
+(alias\ \fBsvgid\fR).
+T}
+
+sgroup SGROUP  T{
+saved group\ name.  This will be the textual group\ ID,
+if\ it can be obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+T}
+
+sid    SID     T{
+see\ \fBsess\fR.  (alias\ \fBsess\fR,\ \fBsession\fR).
+T}
+
+sig    PENDING T{
+see\ \fBpending\fR.  (alias\ \fBpending\fR,\ \fBsig_pend\fR).
+T}
+
+sigcatch       CAUGHT  T{
+see\ \fBcaught\fR.  (alias\ \fBcaught\fR,\ \fBsig_catch\fR).
+T}
+
+sigignore      IGNORED T{
+see\ \fBignored\fR.  (alias\ \fBignored\fR,\ \fBsig_ignore\fR).
+T}
+
+sigmask        BLOCKED T{
+see\ \fBblocked\fR.  (alias\ \fBblocked\fR,\ \fBsig_block\fR).
+T}
+
+size   SZ      T{
+approximate amount of swap space that would be required
+if the process were to dirty all writable pages and then
+be swapped out.
+This number is very\ rough!
+T}
+
+spid   SPID    T{
+see \fBlwp\fR.  (alias\ \fBlwp\fR,\ \fBtid\fR).
+T}
+
+stackp STACKP  T{
+address of the bottom (start) of stack for the process.
+T}
+
+start  STARTED T{
+time the command started.
+If the process was started less than 24 hours ago,
+the output format is "HH:MM:SS",
+else it is "\ \ mmm\ dd"
+(where mmm is a three\-letter month\ name).
+T}
+
+start_time     START   T{
+starting time or date of the process.
+Only the year will be displayed if the process was not
+started the same year \fBps\fR was invoked,
+or\ "mmmdd" if\ it was not started the same day,
+or\ "HH:MM" otherwise.
+T}
+
+stat   STAT    T{
+multi\-character process state.
+See\ section \fBPROCESS STATE CODES\fR
+for the different values meaning.
+See also \fBs\fR and \fBstate\fR if you just want
+the first character displayed.
+T}
+
+state  S       T{
+see\ \fBs\fR.  (alias\ \fBs\fR).
+T}
+
+suid   SUID    T{
+saved user\ ID.  (alias\ \fBsvuid\fR).
+T}
+
+suser  SUSER   T{
+saved user name.  This will be the textual user\ ID,
+if\ it can be obtained and the field width permits,
+or\ a\ decimal representation otherwise.
+(alias\ \fBsvuser\fR).
+T}
+
+svgid  SVGID   T{
+see\ \fBsgid\fR.  (alias\ \fBsgid\fR).
+T}
+
+svuid  SVUID   T{
+see\ \fBsuid\fR.  (alias\ \fBsuid\fR).
+T}
+
+sz     SZ      T{
+size in physical pages of the core image of the process.
+This includes text, data, and stack space.
+T}
+
+thcount        THCNT   T{
+see \fBnlwp\fR.  (alias\ \fBnlwp\fR).
+number of kernel threads owned by the process.
+T}
+
+tid    TID     T{
+see\ \fBlwp\fR.  (alias\ \fBlwp\fR).
+T}
+
+time   TIME    T{
+cumulative CPU\ time, "[dd\-]hh:mm:ss" format.  (alias\ \fBcputime\fR).
+T}
+
+tname  TTY     T{
+controlling tty (terminal).
+(alias\ \fBtt\fR,\ \fBtty\fR).
+T}
+
+tpgid  TPGID   T{
+ID of the foreground process group on the tty (terminal) that
+the process is connected to, or \-1 if the process is not connected
+to a tty.
+T}
+
+tt     TT      T{
+controlling tty (terminal).  (alias\ \fBtname\fR,\ \fBtty\fR).
+T}
+
+tty    TT      T{
+controlling tty (terminal).  (alias\ \fBtname\fR,\ \fBtt\fR).
+T}
+
+ucmd   CMD     T{
+see \fBcomm\fR.  (alias\ \fBcomm\fR,\ \fBucomm\fR).
+T}
+
+ucomm  COMMAND T{
+see \fBcomm\fR.  (alias\ \fBcomm\fR,\ \fBucmd\fR).
+T}
+
+uid    UID     T{
+see \fBeuid\fR.  (alias\ \fBeuid\fR).
+T}
+
+uname  USER    T{
+see \fBeuser\fR.  (alias\ \fBeuser\fR,\ \fBuser\fR).
+T}
+
+user   USER    T{
+see \fBeuser\fR.  (alias\ \fBeuser\fR,\ \fBuname\fR).
+T}
+
+vsize  VSZ     T{
+virtual memory usage of entire process.
+vm_lib\ +\ vm_exe\ +\ vm_data\ +\ vm_stack
+T}
+
+vsz    VSZ     T{
+see \fBvsize\fR.  (alias\ \fBvsize\fR).
+T}
+
+wchan  WCHAN   T{
+name of the kernel function in which the process is sleeping,
+a\ "\-"\ if the process is running,
+or a "*"\ if the process is multi\-threaded and
+\fBps\fR is not displaying threads.
+T}
+.TE
+.\" #######################################################################
+.PP
+.PP
+.SH "ENVIRONMENT VARIABLES"
+The following environment variables could affect \fBps\fR:
+.TP 3
+.B COLUMNS
+Override default display width.
+.TP
+.B LINES
+Override default display height.
+.TP
+.B PS_PERSONALITY
+Set to one of posix, old, linux, bsd, sun, digital...
+(see\ section\ \fBPERSONALITY\fR\ below).
+.TP
+.B CMD_ENV
+Set to one of posix, old, linux, bsd, sun, digital...
+(see\ section\ \fBPERSONALITY\fR\ below).
+.TP
+.B I_WANT_A_BROKEN_PS
+Force obsolete command line interpretation.
+.TP
+.B LC_TIME
+Date format.
+.TP
+.B PS_COLORS
+Not currently supported.
+.TP
+.B PS_FORMAT
+Default output format override.
+.TP
+.B PS_SYSMAP
+Default namelist (System.map) location.
+.TP
+.B PS_SYSTEM_MAP
+Default namelist (System.map) location.
+.TP
+.B POSIXLY_CORRECT
+Don't find excuses to ignore bad "features".
+.TP
+.B POSIX2
+When set to "on", acts as \fBPOSIXLY_CORRECT\fR.
+.TP
+.B UNIX95
+Don't find excuses to ignore bad "features".
+.TP
+.B _XPG
+Cancel \fBCMD_ENV\fI=irix\fR non\-standard behavior.
+.PP
+In general, it\ is a bad idea to set these variables.
+The one exception is \fBCMD_ENV\fR or \fBPS_PERSONALITY\fR,
+which could be set to Linux for normal systems.
+Without that setting,
+\fBps\fR follows the useless and bad parts of the Unix98 standard.
+.PP
+.PP
+.SH "PERSONALITY"
+.TS
+l      l.
+390    like the S/390 OpenEdition \fBps\fR
+aix    like AIX \fBps\fR
+bsd    like FreeBSD \fBps\fR (totally\ non\-standard)
+compaq like Digital Unix \fBps\fR
+debian like the old Debian \fBps\fR
+digital        like Tru64 (was Digital\ Unix, was OSF/1) \fBps\fR
+gnu    like the old Debian \fBps\fR
+hp     like HP\-UX \fBps\fR
+hpux   like HP\-UX \fBps\fR
+irix   like Irix \fBps\fR
+linux  ***** RECOMMENDED *****
+old    like the original Linux \fBps\fR (totally\ non\-standard)
+os390  like OS/390 Open Edition \fBps\fR
+posix  standard
+s390   like OS/390 Open Edition \fBps\fR
+sco    like SCO \fBps\fR
+sgi    like Irix \fBps\fR
+solaris2       like Solaris 2+ (SunOS 5) \fBps\fR
+sunos4 like SunOS 4 (Solaris 1) \fBps\fR (totally\ non\-standard)
+svr4   standard
+sysv   standard
+tru64  like Tru64 (was Digital\ Unix, was OSF/1) \fBps\fR
+unix   standard
+unix95 standard
+unix98 standard
+.TE
+.PP
+.PP
+.SH "SEE ALSO"
+\fItop\fR(1), \fIpgrep\fR(1), \fIpstree\fR(1), \fIproc\fR(5).
+.PP
+.PP
+.SH STANDARDS
+This \fBps\fR conforms to:
+.PP
+.PD 0
+.IP 1 4
+Version 2 of the Single Unix Specification
+.IP 2 4
+The Open Group Technical Standard Base Specifications, Issue\ 6
+.IP 3 4
+IEEE Std 1003.1, 2004\ Edition
+.IP 4 4
+X/Open System Interfaces Extension [UP\ XSI]
+.IP 5 4
+ISO/IEC 9945:2003
+.PD
+.PP
+.SH AUTHOR
+\fBps\fR was originally written by Branko Lankester <lankeste@fwi.uva.nl>. Michael
+K. Johnson <johnsonm@redhat.com> re\-wrote it significantly to use the proc
 filesystem, changing a few things in the process. Michael Shields
-<mjshield@nyx.cs.du.edu> added the pid-list feature. Charles Blake
-<cblake@bbn.com> added multi-level sorting, the dirent-style library, the
-device name-to-number mmaped database, the approximate binary search
+<mjshield@nyx.cs.du.edu> added the pid\-list feature. Charles Blake
+<cblake@bbn.com> added multi\-level sorting, the dirent\-style library, the
+device name\-to\-number mmaped database, the approximate binary search
 directly on System.map, and many code and documentation cleanups. David
-Mossberger-Tang wrote the generic BFD support for psupdate. Albert Cahalan
-<acahalan@cs.uml.edu> rewrote ps for full Unix98 and BSD support, along with
+Mossberger\-Tang wrote the generic BFD support for psupdate. Albert Cahalan
+<albert@users.sf.net> rewrote ps for full Unix98 and BSD support, along with
 some ugly hacks for obsolete and foreign syntax.
 
-Please send bug reports to <acahalan@cs.uml.edu>
+Please send bug reports to <procps\-feedback@lists.sf.net>.
+No\ subscription is required or suggested.