ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux基础命令---显示进程ps

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

原创 Linux操作系统 作者:一生有你llx 时间:2019-02-09 17:20:51 0 删除 编辑

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

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29270124/viewspace-2564950/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
多年物联网讲师经验,曾任职于达内、华清等公司。擅长Linux、c、java、Android、单片机、ZigBee、BLE等领域

注册时间:2018-10-21

  • 博文量
    199
  • 访问量
    83134