ps
PS(1) Linux User's Manual PS(1)
,
NAME
ps - report process status
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.
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 environ-
ment variable (described below) provides more detailed control of ps
behavior.
SIMPLE PROCESS SELECTION
Switch Description
() ()
-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, includ-
ing 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
Switch Description
() ()
-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
Switch Description
() ()
-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
Switch Description
() ()
-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 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 do not print header lines (repeat header lines in BSD
personality)
m all threads
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
--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
Switch Description
() ()
-V print version
L list all format specifiers
V show version info
--help print help message
--info print debugging info
--version print version
OBSOLETE
Switch Description
() ()
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. Selec-
tion 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 (sort-
ing 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 separa-
tor 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 cre-
ated 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
/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.)
Programs swapped out to disk will be shown without command line argu-
ments, 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 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 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.
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 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"
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
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 personal-
ity, and POSIXLY_CORRECT (or UNIX95), which should be set for Unix98
standard compliance.
PS_PERSONALITY Description
() ()
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)
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) pstree(1) proc(5)
STANDARDS
This ps can be set to conform to version 2 of the Single Unix Specifi-
cation.
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 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 approxi-
mate binary search directly on System.map, and many code and documenta-
tion 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.
Michael K. Johnson <johnsonm@redhat.com> is the current maintainer.
Please send bug reports to <procps-list@redhat.com>
()