Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,需要使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
ps通过读取 /proc中的虚拟文件来工作。
命令格式
ps [options]
我所使用的当前版本的PS接受几种选择:
- UNIX选项,可以分组,并且必须以短划线开头。
- BSD选项,可以分组,不能和破折号一起使用。
- GNU长选项,前面是两个破折号。
不同类型的选项可以自由混合,但是可能会出现冲突。 有一些同义的选项,功能是相同的,由于许多标准和PS实现,我所使用的PS是兼容的。
请注意,“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格式(time = TIME)累计的CPU时间,以及可执行文件名(ucmd= CMD)。 输出默认是未排序的。
使用BSD风格的选项会将进程状态(stat = STAT)添加到默认显示中,并显示命令args(args = COMMAND)而不是可执行文件的名称。你可以用PS_FORMAT环境变量覆盖它。
使用BSD风格的选项也会改变进程选择,以包含您在其他终端(TTY)上的进程; 或者,可以将该选择设置为将所有过程的过滤设置为排除其他用户拥有的过程或不在终端上的过程。 当选项在下面被描述为“相同(identical)”时,不考虑这些效果,所以-M将被认为与Z等同。
除了如下所述,进程选择选项是叠加的。丢弃掉默认的选择,然后符合选项的进程被添加到要显示的过程集。如果一个进程符合给定的选择标准,则会显示该进程。
a 当某些BSD样式(没有“-”)选项被使用或当ps的个性设置为BSD-like时,取消BSD风格的“只显示你自己”的限制,使它被应用于所有进程的集合上。另一种描述是,该选项导致ps列出所有与终端(tty)有关的进程,或者在与x选项一起使用时列出所有进程。
简单筛选
选项 | 解释 |
---|---|
-A | 选择所有进程 等同于(Identical) -e. |
-a | 选择除session leaders和未与终端相关联的进程之外的所有进程(原谅我解释的稍微有些拗口)。 |
-d | 选择除session leaders以外的所有进程. |
–deselect | 选择除满足指定条件的所有进程(选择结果取反). 等同于(Identical) -N. |
-e | 选择所有进程 等同于(Identical) -A. |
g | 真正的选择所有进程(包括 session leaders)。 此标志已过时,可能会在未来版本中停用。 它通常暗示着一个标志,只有在sunos4个性中才有用。 |
-N | 选择除满足指定条件的所有进程(选择结果取反). 等同于(Identical) –deselect. |
T | 选择与此终端相关的所有进程。与没有任何参数的t选项相同。 |
r | 选择正在运行的进程。 |
x | 当某些BSD样式(没有“-”)选项被使用或当ps的个性设置是BSD-like时。取消bsd样式的“必须有一个tty”限制,这是应用在所有过程的集合上。另一种描述是,该选项导致ps列出您拥有的所有进程(相同的EUID),当与a选项一起使用时列出所有进程。 |
进程选择列表
这些选项以空格分隔或逗号分隔列表的形式接受单个参数。并且可以多次使用。例如:ps -p”1 2″ -p 3,4
选项 | 解释 |
---|---|
-123 | 等同于(Identical) –pid 123. |
123 | 等同于(Identical) –pid 123. |
-C cmdlist | 按命令名称选择。这将选择可执行文件名在cmdlist中给出的进程 |
-G grplist | 选择实际的 group ID (RGID) 或者名称。这将选择其真实组名或ID在grplist列表中的进程。真实的组ID标识了创建该进程的用户组,请参阅getgid(2) |
-g grplist | 按会话或按有效组名称选择。按会话选择由许多标准指定,但按有效组选择是其他几个Linux操作系统使用的逻辑行为。当列表完全是数字时,这个ps将按会话进行选择(如会话所示)。只有在指定了某些组名称的情况下,组ID号才能起作用。请参阅-s和–group选项。 |
–Group grplist | 通过实际groupID(RGID)或名称进行选择。 等同于(Identical) -G. |
–group grplist | 选择有效的groupID(EGID)或名称。这将选择其有效组名或ID在grplist中的进程。有效的groupID描述进程使用文件访问权限的组(请参阅getegid(2))。 -g选项通常是–group的替代选项。 |
p pidlist | 按进程PID选择。 等同于(Identical) -p 和 –pid. |
-p pidlist | 按进程PID选择. 这将选择进程ID号出现在pidlist中的进程。 等同于(Identical) p 和 –pid. |
–pid pidlist | 按进程PID选择. 等同于(Identical) -p 和 p. |
–ppid pidlist | 通过父进程PID选择。 这将在pidlist中选择具有父进程ID的进程。也就是说,它选择pidlist中列出进程的子进程。 |
q pidlist | 按进程PID选择(快速模式)。 等同于(Identical) -q 和 –quick-pid. |
-q pidlist | 通过PID选择(快速模式)。这将选择进程ID号出现在pidlist中的进程。使用此选项,ps只读取pidlist中列出的pid的必要信息,不会应用其他过滤规则。 pids的顺序是未排序和保留的。此模式下不允许其他选择选项,排序和树形列表。等同于(相同)q和–quick-pid。 |
–quick-pid pidlist | 按进程PID选择(快速模式)。 等同于(Identical) -q 和 q. |
-s sesslist | 按会话ID选择。这将选择具有在sesslist中指定的会话标识的进程。 |
–sid sesslist | 按会话ID选择。 等同于(Identical) -s. |
t ttylist | 按tty选择。几乎与-t和–tty相同,但也可以与空的ttylist一起使用来指示与ps关联的终端。使用T选项被认为比使用空ttylist更清洁。 |
-t ttylist | 按tty选择。这将选择与ttylist中给出的终端相关的进程。终端(ttys或用于文本输出的屏幕)可以用多种形式指定:/dev/ttyS1,ttyS1,S1。一个普通的“ – ”可以用来选择没有附加到任何终端的进程。 |
–tty ttylist | 按tty终端选择。 等同于(Identical) -t and t. |
U userlist | 通过有效的userID(EUID)或名称进行选择。这将选择有效用户名或ID在用户列表中的进程。有效的用户ID描述进程使用其文件访问权限的用户(请参阅geteuid(2))。 等同于(Identical)-u 和 –user. |
-U userlist | 通过实际用户ID(RUID)或名称进行选择。它选择实际用户名或ID在用户列表列表中的进程。实际用户标识标识创建该进程的用户,请参阅getuid(2)。 |
-u userlist | 通过有效的用户ID(EUID)或名称进行选择。这将选择有效用户名或ID在用户列表中的进程。有效的用户ID描述进程使用其文件访问权限的用户(请参阅geteuid(2))。等同于(Identical) U 和 –user. |
–User userlist | 通过实际用户ID(RUID)或名称进行选择。 等同于(Identical) -U. |
–user userlist | 通过有效的用户ID(EUID)或名称进行选择。 等同于(Identical) -u 和 U. |
输出格式控制
这些选项用于选择ps显示的信息。输出结果可能因人而异。
选项 | 解释 |
---|---|
-c | 为-l选项显示不同的调度程序信息。 |
–context | 显示安全上下文格式 (For SELinux). |
-f | 完全格式列表。此选项可以与许多其他UNIX样式的选项结合使用来添加额外的列。 这也会导致命令参数被打印。 与-L一起使用时,将添加NLWP(线程数)和LWP(线程ID)列。 请参阅c选项,格式关键字args和格式关键字comm。 |
-F | 额外的完整格式. 请参阅-f选项,那些是-F实现的. |
–format format | 用户定义的格式。 等同于(Identical) -o 和 o. |
j | BSD作业控制格式。 |
-j | 作业格式。 |
l | 显示BSD长格式。 |
-l | 长格式。 -y选项通常对此很有用。 |
-M | 添加一列安全数据。 等同于(Identical) Z (For SELinux). |
O format | 预先加载 o (重载). BSD O选项表现的像-O(用户定义的输出格式,预定义了一些常用字段),也可以用来指定排序顺序。启发式用于确定此选项的行为。为确保获得所需的行为(排序或格式化),以某种其他方式指定选项(例如,使用-O或–sort)。当用作格式化选项时,它与具有BSD个性的-O相同。 |
-O format | 类似于-o,但预加载了一些默认列。 等同于(Identical) -o pid,format,state,tname,time,command 或者是 -o pid,format,tname,time,cmd, 请参阅下面的-o。 |
o format | 指定用户定义的格式。 等同于(Identical) -o 和 –format. |
-o 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”的两列。有疑问时使用多个-o选项。使用PS_FORMAT环境变量根据需要指定默认值; DefSysV和DefBSD是可以用来选择默认的UNIX或BSD列的宏。 |
s | 显示信号格式。 |
u | 显示面向用户的格式。 |
v | 显示虚拟内存格式。 |
X | 寄存器格式。 |
-y | 不要显示标志;使用rss代替addr。该选项只能与-l一起使用。 |
Z | 添加一列安全数据。 等同于(Identical) -M (for SELinux). |
输出修饰
选项 | 解释 |
---|---|
c | 显示真实的命令名称。这源于可执行文件的名称,而不是来自argv的值。因此不显示命令参数和对它们的任何修改。该选项有效地将args格式关键字转换为comm格式关键字;对于-f格式选项和各种BSD格式的选项是很有用的,它们通常都显示命令参数。请参阅-f选项,格式关键字args和格式关键字comm。 |
–cols n | 设置屏幕宽度。 |
–columns n | 设置屏幕宽度。 |
–cumulative | 包括一些死亡的子进程数据(作为与父进程的总和)。Include some dead child process data (as a sum with the parent). |
e | 在命令后显示环境。 |
f | ASCII 格式化进程层次结构 (树状或深林). |
–forest | ASCII 格式化进程树。 |
h | 不显示标题。 (或者,BSD风格中每一屏一个标题). h选项是有问题的。 标准的BSD ps使用这个选项在输出的每个页面上打印一个头部标题,但是较老的Linux ps使用这个选项来完全禁用头部标题。 我当前所使用的这个ps版本遵循Linux的使用,不打印标题,除非使用BSD风格,在这种情况下,它会在每个输出页面上打印一个标题。无论当前处于何种风格,您都可以使用长选项–headers和–no-headers来分别在每个页面上打印标题或禁用标题。 |
-H | 显示进程层次结构(树状或深林). |
–headers | 重复标题行,每页输出一个。 |
k spec | 指定排序顺序。。排序语法是[+|-]key[,[+|-]key[,…]]。从《标准格式描述符》部分选择一个多字母key。“+”是可选的,因为默认方向是升序或字典序。例: ps jaxkuid,-ppid,+pid``ps axk comm o comm,args``ps kstart_time -ef |
–lines n | 设置屏幕高度。 |
-n namelist | 设置名称列表文件。与N相同。正确的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)。 |
N namelist | 指定名称文件。 等同于(Identical) -n, 请参阅 以下-n解释。 |
–no-headers | 根本不打印标题行 –no-heading 是这个选项的别名。 |
O order | 排序顺序(重载)。BSD O选项可以表现为-O(用户定义的输出格式,有一些通用字段预定义),或者可以用来指定排序顺序。启发式用于确定该选项的行为。为了确保获得所需的行为(排序或格式化),以其他方式指定选项(例如,使用- o或–sort)。 对于排序,过时的BSD O选项语法是O[+|-]k1[,[+|-]k2[,…]]。它根据在下面的OBSOLETE SORT KEYS部分中描述的单字母短键k1,k2,…的顺序指定的多级排序来排序进程列表。 “+”现在是可选的,只是在键上重新迭代默认方向,但可能有助于区分O类型和O格式。“-”只在其前面的键上逆转方向。 |
–rows n | 设置屏幕高度。 |
S | 总结一些信息,如CPU使用情况,从死亡的子进程追溯到他们的父进程。这对于检查一个父母程序反复fork off零时性的子进程去工作的系统很有用。 |
–sort spec | 指定排序顺序。 排序语法是[+|-]key[,[+|-]key[,…]]. 《从标准格式描述符》部分选择一个多字母key。“+”是可选的,因为默认方向是升序或字典序。 等同于(Identical) k. 例: ps jax --sort=uid,-ppid,+pid |
w | 宽输出。使用此选项两次以获得无限宽度。 |
-w | 宽输出。使用此选项两次以获得无限宽度。 |
–width n | 设置屏幕宽度。 |
显示线程
选项 | 解释 |
---|---|
H | 像进程一样显示线程。 |
-L | 显示线程,可能与LWP和NLWP列一起。 |
m | 在进程之后显示线程 |
-m | 在进程之后显示线程 |
-T | 显示线程,可能与SPID列一起。 |
其他信息
选项 | 解释 |
---|---|
–help section | 打印帮助信息。 section参数可以是简单,列表,输出,线程,misc或全部之一。参数可以缩写为下划线中的一个,如:s|l|o|t|m|a。 |
–info | 打印调试信息。 |
L | 列出所有格式说明符。 |
V | 打印procps-ng版本。 |
-V | 打印procps-ng版本。 |
–version | 打印procps-ng版本。 |
注意:
ps不需要setuid kmem或者有任何运行权限。不要给ps任何特殊的权限。
ps需要访问namelist以进行正确的WCHAN显示。对于2.6之前的内核,必须安装System.map文件。
CPU使用率目前表示为在整个生命周期中运行的时间百分比。这并不理想,也不符合ps所遵循的标准。 CPU使用率不太可能加起来完全达到100%。
SIZE和RSS字段不计算进程的某些部分,包括页表,内核堆栈,struct thread_info和struct task_struct。这通常至少有20K字节的内存永远驻留。 SIZE是进程程的虚拟大小(代码+数据+栈)。
标记为< defunct>的进程是死进程(所谓的“僵尸”),因为父进程没有正确销毁。如果父进程退出,这些进程将被init(8)销毁。
如果用户名的长度大于显示列的长度,则会显示数字用户标识。
不建议使用ps -aux
等命令选项,因为这是对两种不同标准的混淆。根据POSIX和UNIX标准,上述命令要求显示所有具有TTY的进程(通常是用户正在运行的命令)以及由名为“x”的用户拥有的进程。如果这个用户不存在,那么ps会认为你的意思是“ps aux”
。
进程标志
这些值的总和显示在flags输出说明符所提供的“F”列中:
- 1 (fork,但没有exec)
- 4 (使用超级用户权限)
进程状态码
以下是s,stat和state输出说明符(标题“STAT”或“S”)将显示的不同值,用于描述进程的状态:
状态 | 说明 |
---|---|
D | uninterruptible sleep (usually IO) |
R | running or runnable (on run queue) |
S | interruptible sleep (waiting for an event to complete) |
T | stopped by job control signal |
t | stopped by debugger during the tracing |
W | paging (not valid since the 2.6.xx kernel) |
X | dead (should never be seen) |
Z | defunct (“zombie”) process, terminated but not reaped by its parent |
对于BSD格式和使用stat关键字时,可能会显示其他字符:
状态 | 说明 |
---|---|
< | high-priority (not nice to other users) |
N | low-priority (nice to other users) |
L | has pages locked into memory (for real-time and custom IO) |
s | is a session leader |
l | is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) |
+ | is in the foreground process group |
过时的排序关键字
这些key由BSD O选项(用于排序)使用。GNU–sort选项不使用这些键,但却存在于《标准格式说明符》部分中。请注意,用于排序的值是ps使用的内部值,而不是某些输出格式字段中使用的“cooked”值(例如,在tty上排序将排序为设备编号,而不是按照显示的终端名称)。如果要对已cooked好的值进行排序,则将ps输出输出到sort(1)命令中。
KEY | LONG | DESCRIPTION |
---|---|---|
c | cmd | simple name of executable |
C | pcpu | cpu utilization |
f | flags | flags as in long format F field |
g | pgrp | process group ID |
G | tpgid | controlling tty process group ID |
j | cutime | cumulative user time |
J | cstime | cumulative system time |
k | utime | user time |
m | min_flt | number of minor page faults |
M | maj_flt | number of major page faults |
n | cmin_flt | cumulative minor page faults |
N | cmaj_flt | cumulative major page faults |
o | session | session ID |
p | pid | process ID |
P | ppid | parent process ID |
r | rss | resident set size |
R | resident | resident pages |
s | size | memory size in kilobytes |
S | share | amount of shared pages |
t | tty | the device number of the controlling tty |
T | start_time | time process was started |
U | uid | user ID number |
u | user | user name |
v | vsize | total VM size in KiB |
y | priority | kernel scheduling priority |
标准格式说明符
这里是可能用于控制输出格式的不同关键字(例如,选项 - o
),或者用GNUstyle -- sort
选项对所选的进程进行排序。
例如:ps -eo pid,user,args -- sort users
以下用户定义的格式说明符可能包含空格:args、cmd、comm、command、fname、ucmd、ucomm、lstart、bsdstart、start。
好吧,这个我实在写不下去了,太长了,大家可以参考man手册。
环境变量
以下是可能会影响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 | 默认输出格式覆盖。您可以将其设置为用于-o选项的格式字符串。 DefSysV和DefBSD的值特别有用。 |
PS_SYSMAP | 默认名称列表(System.map)的位置。 |
PS_SYSTEM_MAP | 默认名称列表(System.map)的位置。 |
POSIXLY_CORRECT | 不要忽略不好的“特征”。 |
POSIX2 | 当设置为“on”时,表现的像POSIXLY_CORRECT。 |
UNIX95 | 不要忽略不好的“特征”。 |
_XPG | 取消CMD_ENV = irix 非标准行为。 |
一般来说,设置这些变量是一个不太好的主意。一个例外是CMD_ENV或者PS_PERSONALITY,可以在普通系统上设置为Linux。没有这个设置,ps遵循Unix98标准的无用和坏的部分。
个性化
选项 | 解释 |
---|---|
390 | like the OS/390 OpenEdition ps |
aix | like AIX ps |
bsd | like FreeBSD ps (totally non-standard) |
compaq | like Digital Unix ps |
debian | like the old Debian ps |
digital | like Tru64 (was Digital Unix, was OSF/1) ps |
gnu | like the old Debian ps |
hp | like HP-UX ps |
hpux | like HP-UX ps |
irix | like Irix ps |
linux | ***** recommended ***** |
old | like the original Linux ps (totally non-standard) |
os390 | like OS/390 Open Edition ps |
posix | standard |
s390 | like OS/390 Open Edition ps |
sco | like SCO ps |
sgi | like Irix ps |
solaris2 | like Solaris 2+ (SunOS 5) ps |
sunos4 | like SunOS 4 (Solaris 1) ps (totally non-standard) |
svr4 | standard |
sysv | standard |
tru64 | like Tru64 (was Digital Unix, was OSF/1) ps |
unix | standard |
unix95 | standard |
unix98 | standard |
使用实例
实例1:显示所有进程信息
命令:
ps -A
输出:
[root@localhost test6]# ps -A
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:01 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:00:01 migration/1
5 ? 00:00:00 ksoftirqd/1
6 ? 00:29:57 events/0
7 ? 00:00:00 events/1
8 ? 00:00:00 khelper
49 ? 00:00:00 kthread
54 ? 00:00:00 kblockd/0
55 ? 00:00:00 kblockd/1
56 ? 00:00:00 kacpid
217 ? 00:00:00 cqueue/0
……省略部分结果
实例2:显示指定用户信息
命令:
ps -u root
输出:
[root@localhost test6]# ps -u root
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:01 migration/0
3 ? 00:00:00 ksoftirqd/0
4 ? 00:00:01 migration/1
5 ? 00:00:00 ksoftirqd/1
6 ? 00:29:57 events/0
7 ? 00:00:00 events/1
8 ? 00:00:00 khelper
49 ? 00:00:00 kthread
54 ? 00:00:00 kblockd/0
55 ? 00:00:00 kblockd/1
56 ? 00:00:00 kacpid
……省略部分结果
实例3:显示所有进程信息,连同命令行
命令:
ps -ef
输出:
[root@localhost test6]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 2 1 0 Nov02 ? 00:00:01 [migration/0]
root 3 1 0 Nov02 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 Nov02 ? 00:00:01 [migration/1]
root 5 1 0 Nov02 ? 00:00:00 [ksoftirqd/1]
root 6 1 0 Nov02 ? 00:29:57 [events/0]
root 7 1 0 Nov02 ? 00:00:00 [events/1]
root 8 1 0 Nov02 ? 00:00:00 [khelper]
root 49 1 0 Nov02 ? 00:00:00 [kthread]
root 54 49 0 Nov02 ? 00:00:00 [kblockd/0]
root 55 49 0 Nov02 ? 00:00:00 [kblockd/1]
root 56 49 0 Nov02 ? 00:00:00 [kacpid]
……省略部分结果
实例4: ps 与grep 常用组合用法,查找特定进程
命令:
ps -ef|grep ssh
输出:
[root@localhost test6]# ps -ef|grep ssh
root 2720 1 0 Nov02 ? 00:00:00 /usr/sbin/sshd
root 17394 2720 0 14:58 ? 00:00:00 sshd: root@pts/0
root 17465 17398 0 15:57 pts/0 00:00:00 grep ssh
实例5:将目前属于您自己这次登入的 PID 与相关信息列示出来
命令:
ps -l
输出:
[root@localhost test6]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 17398 17394 0 75 0 - 16543 wait pts/0 00:00:00 bash
4 R 0 17469 17398 0 77 0 - 15877 - pts/0 00:00:00 ps
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就
是 “-”
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 – 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l
的时候,只有三个 PID。
实例6:列出目前所有的正在内存当中的程序
命令:
ps aux
输出:
[root@localhost test6]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 10368 676 ? Ss Nov02 0:00 init [3]
root 2 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/0]
root 3 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S< Nov02 0:01 [migration/1]
root 5 0.0 0.0 0 0 ? SN Nov02 0:00 [ksoftirqd/1]
root 6 0.0 0.0 0 0 ? S< Nov02 29:57 [events/0]
root 7 0.0 0.0 0 0 ? S< Nov02 0:00 [events/1]
root 8 0.0 0.0 0 0 ? S< Nov02 0:00 [khelper]
root 49 0.0 0.0 0 0 ? S< Nov02 0:00 [kthread]
root 54 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/0]
root 55 0.0 0.0 0 0 ? S< Nov02 0:00 [kblockd/1]
root 56 0.0 0.0 0 0 ? S< Nov02 0:00 [kacpid]
……省略部分结果
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
实例7:列出类似程序树的程序显示
命令:
ps -axjf
输出:
[root@localhost test6]# ps -axjf
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:00 init [3]
1 2 1 1 ? -1 S< 0 0:01 [migration/0]
1 3 1 1 ? -1 SN 0 0:00 [ksoftirqd/0]
1 4 1 1 ? -1 S< 0 0:01 [migration/1]
1 5 1 1 ? -1 SN 0 0:00 [ksoftirqd/1]
1 6 1 1 ? -1 S< 0 29:58 [events/0]
1 7 1 1 ? -1 S< 0 0:00 [events/1]
1 8 1 1 ? -1 S< 0 0:00 [khelper]
1 49 1 1 ? -1 S< 0 0:00 [kthread]
49 54 1 1 ? -1 S< 0 0:00 \_ [kblockd/0]
49 55 1 1 ? -1 S< 0 0:00 \_ [kblockd/1]
49 56 1 1 ? -1 S< 0 0:00 \_ [kacpid]
实例8:找出与 cron 与 syslog 这两个服务有关的 PID 号码
[root@localhost test6]# ps aux | egrep '(cron|syslog)'
root 2682 0.0 0.0 83384 2000 ? Sl Nov02 0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root 2735 0.0 0.0 74812 1140 ? Ss Nov02 0:00 crond
root 17475 0.0 0.0 61180 832 pts/0 S+ 16:27 0:00 egrep (cron|syslog)
其他实例:
1 . 可以用 | 管道和 more 连接起来分页查看
ps -aux |more
2 . 把所有进程显示出来,并输出到ps001.txt文件
ps -aux > ps001.txt
3 . 输出指定的字段
ps -o pid,ppid,pgrp,session,tpgid,comm
[root@localhost test6]# ps -o pid,ppid,pgrp,session,tpgid,comm
PID PPID PGRP SESS TPGID COMMAND
17398 17394 17398 17398 17478 bash
17478 17398 17478 17398 17478 ps
总结
需要介绍的大致就这么多了,可以发现,ps命令实在太庞大了,不过主要是因为它兼容了不同的风格所导致的,一般情况下我们并不需要完全了解。
你可以把本文章当成是手册来翻阅。
参考链接:
https://linux.cn/article-4743-1.html
http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/ps.html
http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html