ps(1) gives a snapshot of the current processes. If you want
a repetitive update of this status, use top.
COMMAND-LINE OPTIONS
This version of ps accepts several kinds of options.
Unix98 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"
lfCW l.
Switch
Description
.TH
-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
T{
select all processes on a terminal, including those of other users
T}
g
T{
really all, even group leaders (does nothing w/o SunOS settings)
T}
r
restrict output to running processes
x
select processes without controlling ttys
--deselect
negate selection
"PROCESS SELECTION BY LIST"
lfCW l.
Switch
Description
.TH
-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
--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"
lfCW l.
Switch
Description
.TH
-O
is preloaded "-o"
-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
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
"OUTPUT MODIFIERS"
lfCW l.
Switch
Description
.TH
-H
show process hierarchy (forest)
-m
show all threads
-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
T{
include some dead child process data (as a sum with the parent)
T}
c
true command name
e
show environment after the command
f
ASCII-art process hierarchy (forest)
h
T{
do not print header lines (repeat header lines in BSD personality)
T}
m
all threads
n
numeric output for WCHAN and USER
w
wide output
--cols
set screen width
--columns
set screen width
--cumulative
T{
include some dead child process data (as a sum with the parent)
T}
--forest
ASCII art process tree
--html
HTML escaped output
--headers
repeat header lines
--no-headers
print no header line at all
--lines
set screen height
--nul
unjustified output with NULs
--null
unjustified output with NULs
--rows
set screen height
--sort
specify sorting order
--width
set screen width
--zero
unjustified output with NULs
INFORMATION
lfCW l.
Switch
Description
.TH
-V
print version
L
list all format specifiers
V
show version info
--help
print help message
--info
print debugging info
--version
print version
OBSOLETE
lfCW l.
Switch
Description
.TH
A
increase 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
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
disable headers entirely, respectively.
Terminals (ttys, or screens of 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, 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:
Alternatively, on 2.5 kernels with
KALLSYMS enabled,
ps(1) can read the predecoded wchan value directly from
/proc .
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.)
Programs swapped out to disk will be shown without command line arguments,
and unless the c 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 a task's page tables, process descriptor,
kernel stack. This is at least ~10K of physical 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 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
2
used super-user privileges
DUMPCORE
4
dumped core
"PROCESS STATE CODES"
D
uninterruptible sleep (usually IO)
R
runnable (on run queue)
S
sleeping
T
traced or stopped
Z
a defunct ("zombie") process
For BSD formats and when the "stat" keyword is used, additional
letters may be displayed:
W
has no resident pages
<
high-priority process
N
low-priority task
L
has pages locked into memory (for real-time and custom IO)
"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.
lfCW lfCW l.
KEY
LONG
DESCRIPTION
.TH
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 bytes
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"
lfCW lfCW l.
CODE
NORMAL
HEADER
.TH
%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
lfCW lfCW.
CODE
HEADER
.TH
%cpu
%CPU
%mem
%MEM
alarm
ALARM
args
COMMAND
blocked
BLOCKED
bsdstart
START
bsdtime
TIME
c
C
caught
CAUGHT
cp
CP
cpu
CPU
cmd
CMD
comm
COMMAND
command
COMMAND
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
policy
POL
ppid
PPID
pri
PRI
rgid
RGID
rgroup
RGROUP
rss
RSS
rssize
RSS
rsz
RSZ
rtprio
RTPRIO
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
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_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 two exceptions
are CMD_ENV (or PS_PERSONALITY), to set the desired default personality,
and POSIXLY_CORRECT (or UNIX95), which should be set for Unix98 standard
compliance.
lfCW l.
PS_PERSONALITY
Description
.TH
none
"Do the right thing"
aix
like AIX ps
bsd
like FreeBSD ps
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
deviate from Unix98 for convenience only
old
like the original Linux ps
posix
standard
sco
like SCO ps
sgi
like Irix ps
sun
like SunOS 4 ps
sunos
like SunOS 4 ps
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)
This ps can be set to conform to version 2 of the Single Unix Specification.
AUTHOR
ps(1) 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 <shields@msrl.com> 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 Mosberger-Tang wrote the generic BFD support for psupdate.
Albert Cahalan <acahalan@cs.uml.edu> rewrote ps for full Unix98 and
BSD support, along with some ugly hacks for obsolete and foreign syntax.
The procps package is maintained by Robert Love and was created by Michael
Johnson.
Send bug reports to <procps-list@redhat.com>.