Linux中ps 命令使用详解

简介: Linux中ps 命令使用详解

Linux ps 命令功能很强大,了解 ps 命令首先需要从 ps 命令的选项格式入手。像其他很多 linux shell 命令一样,ps 命令的选项也有长格式和短格式的区别。短选项中也可以带中横线、也可以不带中横线。


根据选项长短和是否有横线的情况,ps 命令的选项可以分为以下 3 类:


BSD 风格语法,必须不能以中横线开头,如 px aux

SYSV/UNIX 风格语法,必须仅一个中横线开头;

GNU 风格语法,必须以两个中横线开头;


也就是说PS命令必须要考虑或者兼容不同风格语法,故而不能随意进行组合。PS命令是一系列固定组合命令。



实例如下

BSD风格

#BSD风格
[root@localhost ~]# ps u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       1259  0.0  3.1 290964 30952 tty1     Ssl+ 00:40   0:01 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/
root       9212  0.1  0.3 116668  3280 pts/0    Ss   09:57   0:00 -bash
root       9253  0.0  0.1 155372  1864 pts/0    R+   09:58   0:00 ps u


SYSV风格/UNIX风格

#SYSV风格/UNIX风格
[root@localhost ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   9212   9206  0  80   0 - 29167 do_wai pts/0    00:00:00 bash
0 R     0   9254   9212  0  80   0 - 38312 -      pts/0    00:00:00 ps


SYSV风格/UNIX风格

#SYSV风格/UNIX风格
[root@localhost ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   9212   9206  0  80   0 - 29167 do_wai pts/0    00:00:00 bash
0 R     0   9254   9212  0  80   0 - 38312 -      pts/0    00:00:00 ps

GNU风格

#GNU风格
[root@localhost ~]# ps --pid 1
   PID TTY          TIME CMD
     1 ?        00:00:07 systemd

【1】什么是PS命令

这个命令用的太多太多,各种各样的版本,如查看系统中tomcat进程:

ps -ef|grep tomcat
ps aux |grep tomcat


简解


ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。


ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。


语法:


语法:

ps(选项)


选项说明如下:

-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 
a:显示现行终端机下的所有程序,包括其他用户的程序。 
-A:显示所有程序。
-c:显示CLS和PRI栏位。 
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 
-d:显示所有程序,但不包括阶段作业领导者的程序。 
-e:此选项的效果和指定"A"选项相同。 
e:列出程序时,显示每个程序所使用的环境变量。 
-f:显示UID,PPIP,C与STIME栏位。 
f:用ASCII字符显示树状结构,表达程序间的相互关系。 
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 
g:显示现行终端机下的所有程序,包括群组领导者的程序。 
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 
h:不显示标题列。 
-H:显示树状结构,表示程序间的相互关系。 
-j或j:采用工作控制的格式显示程序状况。 
-l或l:采用详细的格式来显示程序状况。 
L:列出栏位的相关信息。 
-m或m:显示所有的执行绪。 
n:以数字来表示USER和WCHAN栏位。 
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。 
-p<程序识别码>:指定程序识别码,并列出该程序的状况。 
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 
r:只列出现行终端机正在执行中的程序。 
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 
s:采用程序信号的格式显示程序状况。 
S:列出程序时,包括已中断的子程序资料。 
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 
-T:显示现行终端机下的所有程序。 
-u<用户识别码>:此选项的效果和指定"-U"选项相同。 
u:以用户为主的格式来显示程序状况。 
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 
U<用户名称>:列出属于该用户的程序的状况。 
v:采用虚拟内存的格式显示程序状况。 
-V或V:显示版本信息。 
-w或w:采用宽阔的格式来显示程序状况。  
x:显示所有程序,不以终端机来区分。 
X:采用旧式的Linux i386登陆格式显示程序状况。 
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 
-<程序识别码>:此选项的效果和指定"p"选项相同。 
--cols<每列字符数>:设置每列的最大字符数。 
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 
--cumulative:此选项的效果和指定"S"选项相同。 
--deselect:此选项的效果和指定"-N"选项相同。 
--forest:此选项的效果和指定"f"选项相同。 
--headers:重复显示标题列。 
--help:在线帮助。 
--info:显示排错信息。 
--lines<显示列数>:设置显示画面的列数。 
--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 
--group<群组名称>:此选项的效果和指定"-G"选项相同。 
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。 
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。 
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。 
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。 
--user<用户名称>:此选项的效果和指定"-U"选项相同。 
--User<用户识别码>:此选项的效果和指定"-U"选项相同。 
--version:此选项的效果和指定"-V"选项相同。 
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。


【2】使用PS命令查看当前系统进程

实例1

[root@bogon ~]# ps -Al|grep nginx
F S   UID    PID   PPID  C PRI  NI ADDR   SZ    WCHAN   TTY       TIME      CMD
1 S     0   3983      1  0  80   0  -    11490  sigsus   ?        00:00:00  nginx
5 S    99   3984   3983  0  80   0  -    12125  ep_pol   ?        00:00:00  nginx


F列是指内核分配给进程的系统标记,说明进程的权限,常见的标志有:

1:进程可以复制,但是不能执行;

4:进程使用超级用户权限

STAT:进程状态

D:不可被唤醒的睡眠状态,通常用户I/O情况

R:该进程正在运行;

S:该进程正在睡眠,可被唤醒;

T:停止状态,可能是在后台暂停或进程在出错状态

W:内存交互状态(从2.6内核开始无效)

X:死掉的进程,应该不会出现

Z:僵尸进程,进程已经终止但是部分程序还在内存中

<:高优先级(以下状态在BSD格式中出现)

N:低优先级

L:被锁入内存

s:包含子进程

l:多线程(这是小写的L哦)

+:位于后台

UID列是指启动这些进程的用户

PID:进程号

PPID:父进程ID

C:该进程的CPU使用率,单位是百分比

PRI列是指进程的优先级(数值越小该进程优先级越高,越快被CPU执行)。

NI列是指谦让I度值,用来参与决定优先级。

ADDR列是指进程的内存地址。

SZ列是指假如进程被换出,所需的交换空间在大致大小。

WCHAN:该进程是否正在运行。"-"表示正在运行。

TTY列是指进程启动时的终端设备。

TIME列是指运行进程需要的累计CPU时间。

CMD列是指启动的程序名称。


实例2

[root@bogon ~]# ps -ef|grep nginx
UID         PID       PPID       C    STIME     TTY         TIME         CMD
root       3983       1          0     11:33       ?        00:00:00     nginx: master process ./nginx
nobody     3984       3983       0     11:33       ?        00:00:00     nginx: worker process
root       7859       6557       0     16:52     pts/0      00:00:00     grep --color=auto nginx

列名字段说明同上。


实例3

[root@bogon ~]# ps aux|grep nginx
USER        PID    %CPU         %MEM        VSZ     RSS     TTY      STAT    START   TIME      COMMAND
root       3983      0.0         0.1        45960    1120     ?       Ss     11:33   0:00       nginx: master process ./nginx
nobody     3984      0.0         0.1        48500    1972     ?       S      11:33   0:00       nginx: worker process
root       7861      0.0         0.0        112712   960      pts/0   R+     16:52   0:00       grep --color=auto nginx
  • VSZ是指进程在内存中的大小,以KB单位。
  • RSS是指进程在未换出时占用的物理内存。
  • STAT:代表当前进程状态的双字符状态码。在STAT双字符状态码中,第一个字符与Unix的S列值一样。后一个字符代表如下:
<: 该进程运行在高优先级上。
N:该进程运行在低优先级上。
L:该进程有页面锁定在内存中。
s: 该进程是控制进程。
l: 该进程是多线程的。
+: 该进程运行在前台。
如S+表示进程状态为后台休眠

指令说明

USER:用户名称

PID:进程号

%CPU:进程占用CPU的百分比

%MEM:进程占用物理内存的百分比

VSZ:进程占用的虚拟内存大小(单位:KB)

RSS:进程占用的物理内存大小(单位:KB)

TT:终端名称,缩写.

STAT:进程状态

D:不可被唤醒的睡眠状态,通常用户I/O情况

R:该进程正在运行;

S:该进程正在睡眠,可被唤醒;

T:停止状态,可能是在后台暂停或进程在出错状态

W:内存交互状态(从2.6内核开始无效)

X:死掉的进程,应该不会出现

Z:僵尸进程,进程已经终止但是部分程序还在内存中

<:高优先级(以下状态在BSD格式中出现)

N:低优先级

L:被锁入内存

s:包含子进程

l:多线程(这是小写的L哦)

+:位于后台

START:进程的启动时间

TIME:该进程占用CPU的运算时间,注意不是系统时间

PPID:父进程ID

STIME:进程启动的时间

TTY:完整的终端名称

COMMAND:启动进程所用的命令和参数,如果过长会被截断显示


关于tty

tty表示该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台(可通过alt+F1-F7键切换不同的终端),tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端,一般是远程连接的终端。第一个远程连接占用的是pts/0终端,第二个远程连接占用pts/1终端,依次递增。




20210531171329892.png

【3】栏位及名称对应

[root@bogon ~]# ps L
%cpu         %CPU
%mem         %MEM
_left        LLLLLLLL
_left2       L2L2L2L2
_right       RRRRRRRR
_right2      R2R2R2R2
_unlimited   U
_unlimited2  U2
alarm        ALARM
args         COMMAND
atime        TIME
blocked      BLOCKED
bsdstart     START
bsdtime      TIME
c            C
caught       CAUGHT
cgroup       CGROUP
class        CLS
cls          CLS
cmd          CMD
comm         COMMAND
command      COMMAND
context      CONTEXT
cp           CP
cpuid        CPUID
cputime      TIME
drs          DRS
dsiz         DSIZ
egid         EGID
egroup       EGROUP
eip          EIP
esp          ESP
etime        ELAPSED
etimes       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
ipcns        IPCNS
label        LABEL
lastcpu      C
lim          LIM
longtname    TTY
lsession     SESSION
lstart       STARTED
luid         LUID
lwp          LWP
m_drs        DRS
m_size       SIZE
m_trs        TRS
machine      MACHINE
maj_flt      MAJFL
majflt       MAJFLT
min_flt      MINFL
minflt       MINFLT
mntns        MNTNS
netns        NETNS
ni           NI
nice         NI
nlwp         NLWP
nwchan       WCHAN
opri         PRI
ouid         OWNER
pagein       PAGEIN
pcpu         %CPU
pending      PENDING
pgid         PGID
pgrp         PGRP
pid          PID
pidns        PIDNS
pmem         %MEM
policy       POL
ppid         PPID
pri          PRI
pri_api      API
pri_bar      BAR
pri_baz      BAZ
pri_foo      FOO
priority     PRI
psr          PSR
rgid         RGID
rgroup       RGROUP
rss          RSS
rssize       RSS
rsz          RSZ
rtprio       RTPRIO
ruid         RUID
ruser        RUSER
s            S
sched        SCH
seat         SEAT
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
size         SIZE
slice        SLICE
spid         SPID
stackp       STACKP
start        STARTED
start_stack  STACKP
start_time   START
stat         STAT
state        S
stime        STIME
suid         SUID
supgid       SUPGID
supgrp       SUPGRP
suser        SUSER
svgid        SVGID
svgroup      SVGROUP
svuid        SVUID
svuser       SVUSER
sz           SZ
tgid         TGID
thcgr        THCGR
thcount      THCNT
tid          TID
time         TIME
tname        TTY
tpgid        TPGID
trs          TRS
trss         TRSS
tsig         PENDING
tsiz         TSIZ
tt           TT
tty          TT
tty4         TTY
tty8         TTY
ucmd         CMD
ucomm        COMMAND
uid          UID
uid_hack     UID
uname        USER
unit         UNIT
user         USER
userns       USERNS
util         C
utsns        UTSNS
uunit        UUNIT
vsize        VSZ
vsz          VSZ
wchan        WCHAN
wname        WCHAN
zone         ZONE


目录
相关文章
|
3天前
|
Linux
linux 常用内存检查命令
linux 常用内存检查命令
11 0
|
1天前
|
存储 安全 算法
|
1天前
|
安全 Linux
Linux cp命令无法强制覆盖
Linux cp命令无法强制覆盖
|
2天前
|
算法 Unix Linux
linux比较两个文件是否一样(linux命令md5sum使用方法)
linux比较两个文件是否一样(linux命令md5sum使用方法)
11 0
|
4天前
|
自然语言处理 安全 Unix
【天枢系列 01】Linux行数统计:命令对决,谁才是王者?
【天枢系列 01】Linux行数统计:命令对决,谁才是王者?
51 4
|
4天前
|
移动开发 Linux Windows
【Linux专题_05】wc -l 命令统计行数为何不准
【Linux专题_05】wc -l 命令统计行数为何不准
21 3
|
4天前
|
Linux
【Linux专题_05】Linux统计行数命令
【Linux专题_05】Linux统计行数命令
12 4
|
5天前
linux-seq命令-3
linux-seq命令
10 0
|
5天前
linux-seq命令-2
linux-seq命令
13 1
|
5天前
|
Linux
linux-seq命令-1
linux-seq命令
12 0

相关产品

  • 云迁移中心