当前位置: > Linux命令 >

Linux基础命令---显示进程ps

时间:2019-02-10 23:59来源:未知 作者:IT

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选项一起使用时列出所有进程。
多个选项 这些选项以空白分隔或逗号分隔列表的形式接受单个参数。它们可以多次使用。
-Ccmdlist 按命令名选择。这将选择在cmdlist中给出可执行名称的进程。
-Ggrplist 选择进程所属的组id与给定list匹配的进程              
Uuserlist 按有效用户ID(EUID)或名称选择。有效用户ID描述进程使用其文件访问权限的用户
-Uuserlist 按实际用户ID(RUID)或名称进行选择。真正的用户ID标识创建进程的用户,
-ggrplist 按会话或有效组名选择。
p pidlist 按进程ID选择。
-ppidlist 按进程ID选择。
-ssesslist 按照会话ID选择
t ttylist 通过tty选择。与-t和--tty几乎相同,但也可以与空ttylist一起使用,以指示与ps关联的终端。
-t ttylist 选择指定的tty
-uuserlist 按有效用户ID(EUID)或名称选择,等价于“U”和“--user”
--Groupgrplist 等价于“-G”
--Useruserlist 等价于“-U”
--groupgrplist 按有效组ID(EGID)或名称选择。有效组ID描述进程使用其文件访问权限的组。
--pidpidlist 等价于“-p”和“p”
-ppidppidlist 选择父进程id匹配的进程
--sidsesslist 等价于“-s” 
--ttyttylist 等价于“-t”和“t”
--useruserlist 等价于“-u”和“U”
-123 等价于“--sid 123”
123 等价于“—pid 123”
 
3、输出格式控制
格式 说明
-f | -F 输出完整的格式。它还会导致输出命令参数。当与-L一起使用时,将添加NLWP(线程数)和LWP(线程ID)列。
-Oformat 类似-o,但预加载了一些默认列。等价于“-o pid,format,state,tname,time,command”或者“-o pid,format,tname,time,cmd”
Oformat 预加载的o。当用作格式设置选项时,它与-O完全相同,具有BSD个性。
-M 添加一列安全数据。
X 寄存器格式
Z 等价于“-M”
-c 显示-l选项的不同调度程序信息。
j BSD作业控制格式
-j 作业格式
l BSD长格式
-l 长格式,经常和“-y”一起使用
oformat 等价于“-o”和“--format”
-oformat 用户定义格式。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 显示安全上下文格式
--formatformat 和“-o”一样
--context 显示安全上下文格式
 
4、输出修饰符
修饰符 说明
-H 显示进程层次结构
O order 排序,过时的操作
S 总结一些信息,如CPU使用情况,从死子进程到父进程。
c 显示真正的命令名。这是从可执行文件的名称派生出来的,而不是从argv值派生的。因此,没有显示命令参数和对它们的任何修改
e 在命令之后显示环境
f | --forest ASCII格式的进程层次结构
h 没有头
k spec 指定排序顺序,等价于“--sort”
-nnamelist  |  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
 



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容