ps
ps
指令可以显示系统中当前进程的信息,它的输出结果是高度可定制的。如果您希望重复更新所选内容和显示的信息,请使用top(1)代替。
请注意,“ps-aux”与“ps aux”不同。POSIX和UNIX标准要求“ps-aux”打印名为“x”的用户拥有的所有进程,以及打印由-a选项选择的所有进程。如果名为“x”的用户不存在,此ps可以将命令解释为“ps aux”,并打印警告。此行为旨在帮助转换旧脚本和习惯。它是脆弱的,随时可能发生变化,因此不应依赖它。
默认情况下,ps选择所有具有相同有效用户ID(EUID=EUID)的进程作为当前用户,并与调用方相关联的终端。它显示进程ID(PID=PID)、与进程关联的终端(tname=TTY)、[dd-]hh:mm:SS格式的累计CPU时间(time=TIME)和可执行名称(ucmd=CMD)。默认情况下输出未排序。
使用BSD样式的选项将向默认显示中添加进程状态(stat=STAT),并显示命令args(args=命令)而不是可执行名称。您可以使用PS_FORMAT环境变量重写此操作。使用BSD样式的选项还将更改流程选择,以包括您拥有的其他终端(TTY)上的进程;或者,这可以描述为将选择设置为筛选的所有进程的集合,以排除其他用户拥有的进程或终端上的进程。当选项被描述为“相同”时,不考虑这些影响,所以-M将被认为与Z相同等等。
此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1
、语法
ps [
选项]
2
、选项列表
选项
说明
--help
显示帮助文档
-V | V | --version
显示命令版本
--info
显示调试信息
L
列出所有的格式
简单选项
-A | -e
选择所有进程
-N | --deselect
反向选择不符合条件的
T
选择符合的终端
-a
选择除会话进程和与终端无关的进程以外的所有进程。
a
此选项导致ps列出带有终端(TTY)的所有进程,或在与x选项一起使用时列出所有进程。
-d
选择所有进程,忽略进程所有者
g
全部的进程,包含会话领导
r
将选择限制为仅运行进程。
x
此选项导致ps列出您拥有的所有进程(与ps相同的EUID),或者在与a选项一起使用时列出所有进程。
多个选项
这些选项以空白分隔或逗号分隔列表的形式接受单个参数。它们可以多次使用。
-C
cmdlist
按命令名选择。这将选择在cmdlist中给出可执行名称的进程。
-G
grplist
选择进程所属的组id与给定list匹配的进程
U
userlist
按有效用户ID(EUID)或名称选择。有效用户ID描述进程使用其文件访问权限的用户
-U
userlist
按实际用户ID(RUID)或名称进行选择。真正的用户ID标识创建进程的用户,
-g
grplist
按会话或有效组名选择。
p
pidlist
按进程ID选择。
-p
pidlist
按进程ID选择。
-s
sesslist
按照会话ID选择
t
ttylist
通过tty选择。与-t和--tty几乎相同,但也可以与空ttylist一起使用,以指示与ps关联的终端。
-t
ttylist
选择指定的tty
-u
userlist
按有效用户ID(EUID)或名称选择,等价于“U 和“--user”
--Group
grplist
等价于“-G”
--User
userlist
等价于“-U”
--group
grplist
按有效组ID(EGID)或名称选择。有效组ID描述进程使用其文件访问权限的组。
--pid
pidlist
等价于“-p”和“p”
-ppid
ppidlist
选择父进程id匹配的进程
--sid
sesslist
等价于“-s”
--tty
ttylist
等价于“-t”和“t”
--user
userlist
等价于“-u”和“U”
-
123
等价于“--sid 123”
123
等价于“—pid 123”
3
、输出格式控制
格式
说明
-f | -F
输出完整的格式。它还会导致输出命令参数。当与-L一起使用时,将添加NLWP(线程数)和LWP(线程ID)列。
-O
format
类似-o,但预加载了一些默认列。等价于“
-o pid,
format
,state,tname,time,command
”或者“
-o pid,
format
,tname,time,cmd
”
O
format
预加载的o。当用作格式设置选项时,它与-O完全相同,具有BSD个性。
-M
添加一列安全数据。
X
寄存器格式
Z
等价于“-M”
-c
显示-l选项的不同调度程序信息。
j
BSD
作业控制格式
-j
作业格式
l
BSD
长格式
-l
长格式,经常和“-y”一起使用
o
format
等价于“-o”和“--format”
-o
format
用户定义格式。format是以空格分隔或逗号分隔的列表形式的单个参数,它提供了一种指定单个输出列的方法。标头可以按需要重命名(
ps -o pid,ruser=RealUser -o comm=Command
)。如果所有列标题都是空的(
ps -o pid= -o comm=
),那么标题行将不会被输出。宽标头所需的列宽度将增加;这可用于扩展诸如WCHAN之类的列(
ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm
)。显式宽度控制(
ps opid,wchan:42,cmd
)也被提供。
ps -o pid=X,comm=Y
的行为随个性而变化,输出可能是一个名为“X,comm=Y”的列,也可以是两个名为“X”和“Y”的列。使用
PS_FORMAT
环境变量按需要指定默认值;DefSysV和DefBSD是可用于选择默认UNIX或BSD列的宏。
s
显示信号格式
u
以用户为主的模式
v
以虚拟内存为主的模式
-y
不显示标志位
-Z
显示安全上下文格式
--format
format
和“-o”一样
--context
显示安全上下文格式
4
、输出修饰符
修饰符
说明
-H
显示进程层次结构
O
order
排序,过时的操作
S
总结一些信息,如CPU使用情况,从死子进程到父进程。
c
显示真正的命令名。这是从可执行文件的名称派生出来的,而不是从argv值派生的。因此,没有显示命令参数和对它们的任何修改
e
在命令之后显示环境
f | --forest
ASCII
格式的进程层次结构
h
没有头
k
spec
指定排序顺序,等价于“--sort”
-n
namelist |
N
namelist
正确的WCHAN显示需要名称列表文件,并且必须与当前Linux内核完全匹配才能得到正确的输出。如果没有此选项,则名称列表的默认搜索路径是:
$PS_SYSMAP
$PS_SYSTEM_MAP
/proc/*/wchan
/boot/System.map-`uname -r`
/boot/System.map
/lib/modules/`uname -r`/System.map
/usr/src/linux/System.map
/System.map
n
WCHAN
和User的数字输出。(包括所有类型的UID和GID)
-w | w
宽输出,对无限宽度使用此选项两次
--cols
n |
--columns
n |
--width
n
设置屏幕宽度
--cumulative
包括一些死子进程数据(作为父进程的和)
--headers
重复头行,每页输出一行
--no-headers
根本不打印标题行
--lines
n |
--rows
n
设置屏幕高度
--sort
spec
排序。语法是“[+|-]key[,[+|-]key[,...]]”,例如,
ps jax --sort=uid,-ppid,+pid
5
、线程模式
线程模式
说明
H
把线程当做进程显示
-L
显示线程的LWP NLWP
-T
显示线程的SPID
m | -m
在进程之后显示线程
6
、说明
这个ps通过读取“/proc”中的虚拟文件来工作。这个ps不需要是setuid kmem,也不需要有任何特权来运行。不要给这个ps任何特殊的权限。此ps需要访问名称列表数据以获得正确的WCHAN显示。对于2.6之前的内核,必须安装System.map文件。
CPU
使用率当前表示为进程在整个生命周期中运行的时间百分比。CPU使用率不太可能达到100%。
SIZE
和RSS字段不计算进程的某些部分,包括页表、内核堆栈、结构体thread_info和task_struct。这通常是至少20kb的内存大小。SIZE是进程的虚拟大小(代码数据堆栈)。
标记为“defunct”的进程是死进程(所谓的“僵尸”),因为它们的父进程没有正确地销毁它们。如果父进程退出,则init(8)将销毁这些进程。
如果用户名的长度大于显示列的长度,则将显示数字用户ID。
7
、进程标志
这些值的和显示在“F”列中,该列由标志输出说明符提供。
1
,已经fork,但是没有执行。
4
,使用超级用户权限。
8
、进程状态码
下面是s、stat和state输出说明符(标头“stat”或“S”)将显示的用于描述进程状态的不同值:
D
,不间断睡眠(通常为IO)。
R
,正在运行或可运行(在运行队列上)。
S
,可中断睡眠(等待事件完成)。
T
,停止,要么是被作业控制信号阻止,要么是因为它正在被跟踪。
W
,分页(自2.6.xx内核以来无效)。
X
,死了(不应该被看见)。
Z
,已停止(“僵尸”)进程,终止但未由其父进程收获。
对于bsd格式和当使用stat关键字时,可能会显示其他字符:
<
,高优先级(对其他用户不好)。
N
,低优先级(对其他用户很好)。
L
,将页面锁定在内存中(用于实时和自定义IO)。
s
,是会话。
l
,是多线程的。
+
,在前台进程组中。
9
、AIX格式描述符
这个ps支持AIX格式描述符,它们的工作方式有点像printf(1)和printf(3)的格式代码。例如,正常的默认输出可以这样产生:
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
10
、标准格式说明符
以下是用于控制输出格式(例如,使用选项-o)或使用GNU样式的“--sort”序选项对所选进程进行排序的不同关键字。例如,“
ps -eo pid,user,args --sort user
”。这个版本的ps试图识别大多数在ps的其他实现中使用的关键字。以下用户定义的格式说明符可能包含空格:
args, cmd, comm,command, fname, ucmd, ucomm, lstart, bsdstart, start
。某些关键字可能无法用于排序。
CODE
HEADER
说明
%cpu
%CPU
进程的CPU利用率为“#.#”格式。当前,它是CPU时间除以进程运行的时间(cputime/realtime比率),表示为百分比。除非你是幸运的,否则它不会达到100%。(别名
pcpu
)
%mem
%MEM
进程的驻留集大小与机器上物理内存的比率,以百分比表示。(别名
PMEM
)
args
COMMAND
命令,它的所有参数都是字符串。可以显示对参数的修改。该列中的输出可能包含空格。标记为“已失效”的进程部分死亡,等待其父进程完全销毁。有时进程args将不可用;当发生这种情况时,ps将可执行文件的名称打印在括号中。(别名cmd,命令)。
当最后指定该列时,该列将扩展到显示的边缘。如果ps不能确定显示宽度,例如当输出被重定向(管道)到一个文件或另一个命令时,输出宽度是未定义的。(它可以是80,无限,TERM等决定)环境变量COLUMNS或-cols选项可以用于精确地确定这种情况下的宽度。
w
或
-w
选项也可用于调整宽度。
blocked
BLOCKED
blocked
信号掩码。根据字段的宽度,以十六进制格式显示32位或64位掩码。(别名sig_block, sigmask)。
bsdstart
START
命令开始的时间。如果进程在24小时前启动,则输出格式为“hh:mm”,否则为“mmm dd”(其中mmm是月份的三个字母)。
bsdtime
TIME
用户和系统的累积CPU时间,。显示格式通常为“mmm:ss”,但如果进程占用的cpu时间超过999分钟,则可以移到右边。
c
C
处理器利用率当前,这是进程生存期内使用百分比的整数值。(见%cpu)。
caught
CAUGHT
捕获信号的掩码,见信号(7)。根据字段的宽度,以十六进制格式显示32或64位掩码。(别名
sig_catch
,
sigcatch
)
cgroup
CGROUP
显示进程所属的控制组。
class
CLS
进程的调度类。(别名
policy
,
cls
)。字段的可能值是:
-
not reported
TS SCHED_OTHER
FF SCHED_FIFO
RR SCHED_RR
B SCHED_BATCH
ISO SCHED_ISO
IDL SCHED_IDLE
? unknown value
cls
CLS
同
class
cmd
CMD
同
args
comm
COMMAND
命令名(只有可执行的名称)。将不会显示对命令名的修改。标记为“已失效”的进程部分死亡,等待其父进程完全销毁。该列中的输出可能包含空格。(别名
ucmd
,
ucomm
)。
当最后指定该列时,该列将扩展到显示的边缘。如果ps不能确定显示宽度,例如当输出被重定向(管道)到一个文件或另一个命令时,输出宽度是未定义的(它可以是80,无限,TERM)
。
COLUMNS
环境变量或
--cols
选项可以用于精确地确定这种情况下的宽度。
w
或
-w
选项也可用于调整宽度。
command
COMMAND
同args
cp
CP
CPU
使用率/ms
cputime
TIME
累计CPU时间,"[DD-]HH:MM:SS"格式。(别名
time
)。
egid
EGID
进程的有效组ID数为十进制整数。(别名
gid
)。
egroup
EFROUP
进程的有效组ID。如果可以获得并且字段宽度允许,这将是文本组ID,否则将是十进制表示。(别名
group
)。
eip
EIP
指令指针
esp
ESP
栈指针
etime
ELAPSED
自进程启动以来,以[dd-]hh:]mm:SS形式运行的时间。
euid
EUID
有效用户ID,别名
uid
euser
EUSER
有效用户名。如果可以获得并且字段宽度允许,这将是文本用户ID,否则将是十进制表示。
n
选项可用于强制十进制表示。(别名
uname
,
user
)。
f
F
与进程关联的标志,请参阅流程标志部分。(别名
flag
,
flags
)。
fgid
FGID
文件系统访问组ID。(别名
fsgid
)。
fgroup
FGROUP
文件系统访问组ID。如果可以获得并且字段宽度允许,这将是文本用户ID,否则将是十进制表示。(别名
fsgroup
)
flag
F
同
f
flags
F
同
f
fname
COMMAND
进程可执行文件的基名的前8个字节。该列中的输出可能包含空格。
fuid
FUID
文件系统访问用户ID。(别名
fsuid
)。
fuser
FUSER
文件系统访问用户ID。如果可以获得并且字段宽度允许,这将是文本用户ID,否则将是十进制表示。
gid
GID
同
egid
group
GROUP
同
egroup
ignored
IGNORED
被忽略的信号的掩码,根据字段的宽度,以十六进制格式显示32位或64位掩码。(别名
sig_ignore
,
sigignore
)
label
LABEL
安全标签,最常用于SELinux上下文数据。这是针对在高安全系统上发现的强制访问控制(“MAC”)。
lstart
STARTED
命令开始的时间。
lwp
LWP
正在报告的LWP(轻量过程或线程)ID。(别名
spid
,
tid
)
ni
NI
nice
值,范围从19(最好)到-20(对他人不友好)。 (别名
nice
)。
nice
NI
同
ni
nlwp
NLWP
进程中的lwps(线程)数。(别名
thcount
)。
nwchan
WCHAN
进程处于休眠状态的内核函数的地址(如果需要内核函数名称,请使用wchan)。正在运行的任务将在本列中显示一个破折号(‘-’)。
pcpu
%CPU
同
%cpu
pending
PENDING
挂起信号的掩码。进程上挂起的信号不同于单个线程上的待决信号。使用
m
选项或
-m
选项查看两者。根据字段的宽度,以十六进制格式显示32位或64位掩码。(别名
sig
)。
pgid
PGID
进程组ID或相应的流程组领导的进程ID。(别名
pgrp
)。
pgrp
PGRP
同
pgid
pid
PID
进程的进程ID号
pmem
%MEM
同
%mem
policy
POL
同
cls
ppid
PPID
父进程id
psr
PSR
进程当前分配给的处理器。
rgid
RGID
真实的组id
rgroup
RGROUP
真正的组名。如果可以获得并且字段宽度允许,这将是文本组ID,否则将是十进制表示。
rip
RIP
64
位指令指针。
rsp
RSP
64
位栈指针。
rss
RSS
驻留集大小,任务使用的非交换物理内存(以千字节为单位)。(别名
rssize
,
rsz
)。
rssize
RSS
同rss
rsz
RSZ
同rss
rtprio
RTPRIO
实时优先级
ruid
RUID
实际用户ID
ruser
RUSER
真实的用户ID。如果可以获得并且字段宽度允许,这将是文本用户ID,否则将是十进制表示。
s
S
最小状态显示(一个字符)。
sched
SCH
进程的调度策略。策略SCHED_OTHER(SCHED_Normal)、SCHED_FIFO、SCHED_RR、SCHED_BATCH、SCHED_ISO和SCHED_IDELL分别显示为0、1、2、3、4和5。
sess
SESS
会话ID或等效的会话领导的进程ID。(别名
session
,
sid
)。
sgi_p
P
进程当前正在执行的处理器。如果进程当前未运行或无法运行,则显示“*”。
sgid
SGID
保存的组ID。(别名
svgid
)
sgroup
SGROUP
保存的组名。如果可以获得并且字段宽度允许,这将是文本组ID,否则将是十进制表示。
sid
SID
同
sess
sig
PENDING
同
pending
sigcatch
CAUGHT
同
caught
sigignore
IGNORED
同
ignored
sigmask
BLOCKED
同
blocked
size
SZ
如果进程要脏所有可写页,然后交换掉,则需要交换大约的交换空间。这个数字很粗糙!
spid
SPID
同lwp
stackp
STACKP
进程堆栈的底部(开始)地址
start
STARTED
命令开始的时候。如果进程在24小时前启动,则输出格式为“hh:mm:ss”,否则为“mmm dd”(其中mmm是三个字母的月份名称)。
start_time
START
进程的开始时间或日期。只有进程未启动的年份(即调用ps的年份)或“mmmdd”(如果进程未在同一天启动)或“hh:mm”将显示。
stat
STAT
多字符进程状态。有关不同值的含义,请参见处理状态代码一节。如果只希望显示第一个字符,请参见
s
和
state
。
state
S
同s
suid
SUID
保存的用户ID。(别名
svuid
)。
suser
SUSER
保存的用户名。如果可以获得并且字段宽度允许,这将是文本用户ID,否则将是十进制表示。(别名
svuser
)
svgid
SVGID
同
sgid
svuid
SVUID
同
suid
sz
SZ
进程核心图像的物理页面大小。这包括文本、数据和堆栈空间。当前排除了设备映射;这可能会发生更改。参见
vsz
和
rss
。
thcount
THCNT
同
nlwp
tid
TID
同
lwp
time
TIME
统计CPU时间,"[DD-]HH:MM:SS"格式。(别名
cputime
)。
tname
TTY
控制TY(终端)(别名
tt
,
tty
)。
tpgid
TPGID
进程连接到的TTY(终端)上的前台进程组的ID,如果进程没有连接到TTY,则为-1。
tt
TT
同
tname
。
tty
TT
同
tname
。
ucmd
CMD
同
comm
。
ucomm
COMMAND
同
comm
。
uid
UID
同
euid
。
uname
USER
同
euser
。
user
USER
同
euser
。
vsize
VSZ
同
vsz
。
vsz
VSZ
进程的虚拟内存大小(1024字节单位)。当前排除了设备映射;这可能会发生更改。(别名
vsize
)。
wchan
WHAN
进程处于休眠状态的内核函数的名称,如果进程正在运行,则为“-”,如果进程是多线程且ps不显示线程,则为“*”。
11
、环境变量
下面的环境变量会影响ps的行为:
COLUMNS
,覆盖默认的宽度。
LINES
,覆盖默认的高度。
PS_PERSONALITY
,设置为POSIX中的一个,old,linux,bsd,sun,digital。
CMD_ENV
,设置为POSIX中的一个,old,linux,bsd,sun,digital。
I_WANT_A_BROKEN_PS
,解释过时命令。
LC_TIME
,日期格式。
PS_COLORS
,现在还不支持。
PS_FORMAT
,默认输出格式覆盖。
PS_SYSMAP
,默认名称列表(System.map)位置。
PS_SYSTEM_MAP
,默认名称列表(System.map)位置。
POSIXLY_CORRECT
,不要找借口忽视不好的“特性”。
POSIX2
,当设置为“on”时,充当POSIXLY_TRIDER。
UNIX95
,
不要找借口忽视不好的“特性”。
_XPG
,取消CMD_ENV=irix非标准行为。
一般来说,设置这些变量是个坏主意。一个例外是CMD_ENV或PS_PERSONALITY,对于正常系统,可以将它们设置为Linux。如果没有这种设置,PS就会遵循Unix 98标准中无用的和坏的部分。
12
、例子代码
若要使用标准语法查看系统上的每个进程,请执行以下操作:
ps -e
ps -ef
ps -eF
ps –ely
若要使用
BSD
语法查看系统上的每个进程,请执行以下操作:
ps ax
ps ax
打印进程树
ps -ejH
ps axjf
获取线程信息
ps -eLf
ps axm
获取安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps –eM
若要以用户格式将每个进程作为根进程运行
(
实际有效
ID)
,请执行以下操作:
ps -U root -u root
要使用用户定义的格式查看每个进程:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan
只打印进程
sislogd
的
PID
ps -C syslogd -o pid=
只打印
PID
为
42
的进程名字
ps -p 42 -o comm=
13
、实例
1
)显示所有用户的所有进程信息
[root@localhost ~]#
ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2900 1504 ? Ss Sep19 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S Sep19 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Sep19 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Sep19 0:02 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Sep19 0:00 [migration/0]
root 6 0.0 0.0 0 0 ? S Sep19 0:02 [watchdog/0]
。。。
david 7226 0.0 0.1 50856 3020 ? Sl 06:32 0:00 /usr/bin/gnome-keyring-daemon --dae
david 7238 0.0 0.3 32944 6244 ? Ssl 06:32 0:00 gnome-session
david 7246 0.0 0.0 3664 760 ? S 06:32 0:00 dbus-launch --sh-syntax --exit-with
david 7247 0.0 0.0 3396 1316 ? Ss 06:32 0:00 /bin/dbus-daemon --fork --print-pid
david 7306 0.0 0.0 19200 364 ? S 06:32 0:00 /usr/bin/VBoxClient --display
david 7308 0.0 0.0 19200 1080 ? S 06:32 0:00 /usr/bin/VBoxClient --display
david 7312 0.0 0.0 19200 360 ? S 06:32 0:00 /usr/bin/VBoxClient --seamless
david 7314 0.0 0.0 20884 1188 ? Sl 06:32 0:00 /usr/bin/VBoxClient --seamless
david 7318 0.0 0.0 19200 360 ? S 06:32 0:00 /usr/bin/VBoxClient --draganddrop
david 7320 0.1 0.0 21400 1296 ? Sl 06:32 0:07 /usr/bin/VBoxClient --draganddrop
david 7343 0.0 0.2 10712 4624 ? S 06:32 0:00 /usr/libexec/gconfd-2
。。。
2
)显示用户david的进程信息
[root@localhost ~]#
ps -u david
PID TTY TIME CMD
7226 ? 00:00:00 gnome-keyring-d
7238 ? 00:00:00 gnome-session
7246 ? 00:00:00 dbus-launch
7247 ? 00:00:00 dbus-daemon
7306 ? 00:00:00 VBoxClient