'\" 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.
.\"
.TH PS 1 "July 28, 2004" "Linux" "Linux User's Manual"
.\"
.\" To render this page:
.\"    groff -t -b -man -X -P-resolution -P100 -Tps ps.1 &
.\"    groff -t -b -man -X -TX100 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
.nh
.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 NAME
ps \- report a snapshot of the current processes.
.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
This version of \fBps\fR accepts several kinds of options:
.PD 0
.IP 1 4
UNIX options, which may be grouped and must be preceded 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 preceded by two dashes.
.PD
.PP
Options of different types may be freely mixed, but conflicts can appear.
There are some synonymous 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.
.P
By default, \fBps\fR selects all processes
with the same effective user ID (euid=EUID) as the current user
and
associated with the same terminal as the invoker.
It displays the process ID (pid=PID),
the terminal associated with the process (tname=TTY),
the cumulated CPU time in [dd\-]hh:mm:ss format (time=TIME),
and the executable name (ucmd=CMD).
Output is unsorted by default.
.P
The use of BSD\-style options will add process state (stat=STAT) to the
default display and show the command args (args=COMMAND) instead of the
executable name. You can override this with the \fBPS_FORMAT\fR
environment variable. 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. These effects
are not considered when options are described as being "identical" below,
so \fB\-M\fR will be considered identical to \fBZ\fR and so on.
.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 given
selection criteria.
.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 running as root (real\ &\ effective\ ID) in user format:
.B ps\ \-U\ root\ \-u\ root\ u
.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
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"
.opt \-A
Select all processes.  Identical to \fB\-e\fR.

.opt \-N
Select all processes except those that fulfill the specified conditions.
(negates the selection) Identical to \fB\-\-deselect\fR.

.opt T
Select all processes associated with this terminal.  Identical to the
\fBt\fR option without any argument.

.opt \-a
Select all processes except both session leaders (see \fIgetsid\fR(2)) and
processes not associated with a terminal.

.opt 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.

.opt \-d
Select all processes except session leaders.

.opt \-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.
.opt 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.

.opt r
Restrict the selection to only running processes.

.opt x
Lift the BSD\-style "must have a tty" 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 owned by you (same EUID as \fBps\fR),
or to list all processes when used together with the \fBa\fR option.

.opt \-\-deselect
Select all processes except those that fulfill the specified conditions.
(negates the selection) Identical to \fB\-N\fR.

.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.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
.opt \-C \ cmdlist
Select by command name.
.br
This selects the processes whose executable name is given in
\fIcmdlist\fR.

.opt \-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).

.opt 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.

.opt \-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).

.opt \-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.

.opt p \ pidlist
Select by process ID.  Identical to \fB\-p\fR and\ \fB\-\-pid\fR.

.opt \-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.

.opt \-s \ sesslist
Select by session ID.
.br
This selects the processes
with a session ID specified in\ \fIsesslist\fR.

.opt 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.

.opt \-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.

.opt \-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.

.opt \-\-Group \ grplist
Select by real group ID (RGID) or name.  Identical to \fB\-G\fR.

.opt \-\-User \ userlist
Select by real user ID (RUID) or name.  Identical to \fB\-U\fR.

.opt \-\-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.

.opt \-\-pid \ pidlist
Select by process\ ID.  Identical to \fB\-p\fR\ and\ \fBp\fR.

.opt \-\-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.

.opt \-\-sid \ sesslist
Select by session\ ID.  Identical to\ \fB\-s\fR.

.opt \-\-tty \ ttylist
Select by terminal.  Identical to \fB\-t\fR and\ \fBt\fR.

.opt \-\-user \ userlist
Select by effective user ID (EUID) or name.
Identical to \fB\-u\fR and\ \fBU\fR.

.opt \-\fI123\fR
Identical to \fB\-\-sid\ \fI123\fR.

.opt \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

.opt \-F
extra full format. See the \fB\-f\fR option, which \fB\-F\fR implies.

.opt \-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.

.opt 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.

.opt \-M
Add a column of security data. Identical to \fBZ\fR. (for\ SE\ Linux)

.opt X
Register format.

.opt Z
Add a column of security data. Identical to \fB\-M\fR. (for\ SE\ Linux)

.opt \-c
Show different scheduler information for the \fB\-l\fR option.

.opt \-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.
See the \fBc\fR option, the format keyword \fBargs\fR, and the
format keyword \fBcomm\fR.

.opt j
BSD job control format.

.opt \-j
jobs format

.opt l
display BSD long format.

.opt \-l
long format. The \fB\-y\fR option is often useful with this.

.opt o \ format
specify user\-defined format.  Identical to \fB\-o\fR and
\fB\-\-format\fR.

.opt \-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 (\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 \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.

.opt s
display signal format

.opt u
display user\-oriented format

.opt v
display virtual memory format

.opt \-y
Do not show flags; show rss in place of addr.
This option can only be used with \fB\-l\fR.

.opt \-\-format \ format
user\-defined format.  Identical to \fB\-o\fR and \fBo\fR.

.opt \-\-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

.opt \-H
show process hierarchy (forest)

.opt N \ namelist
Specify namelist file.  Identical to \fB\-n\fR, see \fB\-n\fR above.

.opt 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.

.opt 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.

.opt c
Show the true command name. This is derived from the name of the
executable file, rather than from the argv value. Command arguments
and any modifications to them (see\ \fIsetproctitle\fR(3)) are
thus not shown. This option
effectively turns the \fBargs\fR format keyword into the \fBcomm\fR
format keyword; it is useful with the \fB\-f\fR format option and with
the various BSD\-style format options, which all normally
display the command arguments.
See the \fB\-f\fR option, the format keyword \fBargs\fR, and the
format keyword \fBcomm\fR.

.opt e
Show the environment after the command.

.opt f
ASCII\-art process hierarchy (forest)

.opt 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.

.opt 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

.opt \-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

.opt n
Numeric output for WCHAN and USER. (including all types of UID and GID)

.opt \-w
Wide output. Use this option twice for unlimited width.

.opt w
Wide output. Use this option twice for unlimited width.

.opt \-\-cols \ n
set screen width

.opt \-\-columns \ n
set screen width

.opt \-\-cumulative
include some dead child process data (as a sum with the parent)

.opt \-\-forest
ASCII art process tree

.opt \-\-headers
repeat header lines, one per page of output

.opt \-\-no\-headers
print no header line at all

.opt \-\-lines \ n
set screen height

.opt \-\-rows \ n
set screen height

.opt \-\-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

.opt \-\-width \ n
set screen width

.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
.PP
.SH "THREAD DISPLAY"
.PD 0

.opt H
Show threads as if they were processes

.opt \-L
Show threads, possibly with LWP and NLWP columns

.opt \-T
Show threads, possibly with SPID column

.opt m
Show threads after processes

.opt \-m
Show threads after processes

.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
.PP
.SH "OTHER INFORMATION"
.PD 0

.opt L
List all format specifiers.

.opt \-V
Print the procps version.

.opt V
Print the procps version.

.opt \-\-help
Print a help message.

.opt \-\-info
Print debugging info.

.opt \-\-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%.

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).

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 \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:
.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 controlling 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.  Currently, 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. Modifications to the arguments
may be shown. The output in this column may contain spaces.
A\ process marked <defunct> is partly dead, waiting
to be fully destroyed by its parent. Sometimes the process args
will be unavailable; when this happens, \fBps\fR will instead
print the executable name in brackets.
(alias\ \fBcmd\fR,\ \fBcommand\fR). See also the \fBcomm\fR format
keyword, the \fB\-f\fR option, and the \fBc\fR option.
.br
When specified last, this column will extend to the edge of the display.
If \fBps\fR can not determine display width, as when output is redirected
(piped) into a file or another command, the output width is undefined.
(it may be 80, unlimited, determined by the \fBTERM\fR variable, and so on)
The \fBCOLUMNS\fR environment variable or \fB\-\-cols\fR option may
be used to exactly determine the width in this case.
The \fBw\fR or \fB\-w\fR option may be also be used to adjust width.
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).
See also \fBlstart\fR, \fBstart\fR, \fBstart_time\fR, and \fBstime\fR.
T}

bsdtime	TIME	T{
accumulated cpu time, user\ +\ system.  The display format is usually
"MMM:SS", but can be shifted to the right if the process used more than 999
minutes of cpu time.
T}

c	C	T{
processor utilization. Currently, this is the integer value of
the percent usage over the lifetime of the process.  (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
B	SCHED_BATCH
.br
ISO	SCHED_ISO
.br
IDL	SCHED_IDLE
.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
B	SCHED_BATCH
.br
ISO	SCHED_ISO
.br
IDL	SCHED_IDLE
.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).  Modifications to the command
name will not be shown. A\ process marked <defunct> is partly dead, waiting
to be fully destroyed by its parent. The output in this
column may contain spaces.  (alias\ \fBucmd\fR,\ \fBucomm\fR).
See also the \fBargs\fR format
keyword, the \fB\-f\fR option, and the \fBc\fR option.
.br
When specified last, this column will extend to the edge of the display.
If \fBps\fR can not determine display width, as when output is redirected
(piped) into a file or another command, the output width is undefined.
(it may be 80, unlimited, determined by the \fBTERM\fR variable, and so on)
The \fBCOLUMNS\fR environment variable or \fB\-\-cols\fR option may
be used to exactly determine the width in this case.
The \fBw\fR or \fB\-w\fR option may be also be used to adjust width.
T}

command	COMMAND	T{
see \fBargs\fR.  (alias\ \fBargs\fR,\ \fBcmd\fR).
T}

cp	CP	T{
per\-mill (tenths of a percent) 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.
See also \fBbsdstart\fR, \fBstart\fR, \fBstart_time\fR, and \fBstime\fR.
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
B	SCHED_BATCH
.br
ISO	SCHED_ISO
.br
IDL	SCHED_IDLE
.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 additional
information displayed.  (alias\ \fBstate\fR).
T}

sched	SCH	T{
scheduling policy of the process.  The policies SCHED_OTHER (SCHED_NORMAL),
SCHED_FIFO, SCHED_RR, SCHED_BATCH, SCHED_ISO, and SCHED_IDLE are respectively
displayed as 0,\ 1,\ 2,\ 3,\ 4,\ and\ 5.
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).
See also \fBlstart\fR, \fBbsdstart\fR, \fBstart_time\fR, and \fBstime\fR.
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.
See also \fBbsdstart\fR, \fBstart\fR, \fBlstart\fR, and \fBstime\fR.
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.
Device mappings are currently excluded; this is subject to change.
See \fBvsz\fR and \fBrss\fR.
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{
see \fBvsz\fR.  (alias\ \fBvsz\fR).
T}

vsz	VSZ	T{
virtual memory size of the process in KiB (1024\-byte\ units).
Device mappings are currently excluded; this is subject to change.
(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. You may set this to a format
string of the type used for the \fB\-o\fR option.
The \fBDefSysV\fR and \fBDefBSD\fR values are particularly useful.
.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
directly on System.map, and many code and documentation cleanups. David
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 <procps\-feedback@lists.sf.net>.
No\ subscription is required or suggested.
