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
USERPID %CPU %MEMVSZRSS TTYSTAT STARTTIME COMMAND
root12590.03.1 290964 30952 tty1Ssl+ 00:400:01 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/
root92120.10.3 1166683280 pts/0Ss09:570:00 -bash
root92530.00.1 1553721864 pts/0R+09:580:00 ps u

SYSV风格/UNIX风格
#SYSV风格/UNIX风格
[root@localhost ~]# ps -l
F SUIDPIDPPIDC PRINI ADDR SZ WCHANTTYTIME CMD
4 S0921292060800 - 29167 do_wai pts/000:00:00 bash
0 R0925492120800 - 38312 -pts/000:00:00 ps

GNU风格
#GNU风格
[root@localhost ~]# ps --pid 1
PID TTYTIME 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 SUIDPIDPPIDC PRINI ADDRSZWCHANTTYTIMECMD
1 S0398310800-11490sigsus?00:00:00nginx
5 S99398439830800-12125ep_pol?00:00:00nginx

  • 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
UIDPIDPPIDCSTIMETTYTIMECMD
root39831011:33?00:00:00nginx: master process ./nginx
nobody39843983011:33?00:00:00nginx: worker process
root78596557016:52pts/000:00:00grep --color=auto nginx

列名字段说明同上。
实例3
[root@bogon ~]# ps aux|grep nginx
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root39830.00.1459601120?Ss11:330:00nginx: master process ./nginx
nobody39840.00.1485001972?S11:330:00nginx: worker process
root78610.00.0112712960pts/0R+16:520:00grep --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终端,依次递增。

【3】栏位及名称对应
[root@bogon ~]# ps L
%cpu%CPU
%mem%MEM
_leftLLLLLLLL
_left2L2L2L2L2
_rightRRRRRRRR
_right2R2R2R2R2
_unlimitedU
_unlimited2U2
alarmALARM
argsCOMMAND
atimeTIME
blockedBLOCKED
bsdstartSTART
bsdtimeTIME
cC
caughtCAUGHT
cgroupCGROUP
classCLS
clsCLS
cmdCMD
commCOMMAND
commandCOMMAND
contextCONTEXT
cpCP
cpuidCPUID
cputimeTIME
drsDRS
dsizDSIZ
egidEGID
egroupEGROUP
eipEIP
espESP
etimeELAPSED
etimesELAPSED
euidEUID
euserEUSER
fF
fgidFGID
fgroupFGROUP
flagF
flagsF
fnameCOMMAND
fsgidFSGID
fsgroupFSGROUP
fsuidFSUID
fsuserFSUSER
fuidFUID
fuserFUSER
gidGID
groupGROUP
ignoredIGNORED
intpriPRI
ipcnsIPCNS
labelLABEL
lastcpuC
limLIM
longtnameTTY
lsessionSESSION
lstartSTARTED
luidLUID
lwpLWP
m_drsDRS
m_sizeSIZE
m_trsTRS
machineMACHINE
maj_fltMAJFL
majfltMAJFLT
min_fltMINFL
minfltMINFLT
mntnsMNTNS
netnsNETNS
niNI
niceNI
nlwpNLWP
nwchanWCHAN
opriPRI
ouidOWNER
pageinPAGEIN
pcpu%CPU
pendingPENDING
pgidPGID
pgrpPGRP
pidPID
pidnsPIDNS
pmem%MEM
policyPOL
ppidPPID
priPRI
pri_apiAPI
pri_barBAR
pri_bazBAZ
pri_fooFOO
priorityPRI
psrPSR
rgidRGID
rgroupRGROUP
rssRSS
rssizeRSS
rszRSZ
rtprioRTPRIO
ruidRUID
ruserRUSER
sS
schedSCH
seatSEAT
sessSESS
sessionSESS
sgi_pP
sgi_rssRSS
sgidSGID
sgroupSGROUP
sidSID
sigPENDING
sig_blockBLOCKED
sig_catchCATCHED
sig_ignoreIGNORED
sig_pendSIGNAL
sigcatchCAUGHT
sigignoreIGNORED
sigmaskBLOCKED
sizeSIZE
sliceSLICE
spidSPID
stackpSTACKP
startSTARTED
start_stackSTACKP
start_timeSTART
statSTAT
stateS
stimeSTIME
suidSUID
supgidSUPGID
supgrpSUPGRP
suserSUSER
svgidSVGID
svgroupSVGROUP
svuidSVUID
svuserSVUSER
szSZ
tgidTGID
thcgrTHCGR
thcountTHCNT
tidTID
timeTIME
tnameTTY
tpgidTPGID
trsTRS
trssTRSS
tsigPENDING
tsizTSIZ
ttTT
ttyTT
tty4TTY
tty8TTY
ucmdCMD
ucommCOMMAND
uidUID
uid_hackUID
unameUSER
unitUNIT
userUSER
usernsUSERNS
utilC
utsnsUTSNS
uunitUUNIT
vsizeVSZ
vszVSZ
wchanWCHAN
wnameWCHAN
zoneZONE

【Linux中ps 命令使用详解】


    推荐阅读