linux的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程的信息需要使用top命令。
若要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、那些进程占用过多的资源等等。
linux上进程有五种状态:
1、运行(正在运行或运行队列中等待)
2、中断(休眠中、受阻、在等待某个信号条件的形成)
3、不可中断(收到信号不唤醒和不可运行,进程必须等待)
4、僵死(进程已终止,但进程描述符存在)
5、停止(进程停止运行)
ps工具标识进程的五种状态码:
R:运行 runnable
S:中断 slepping
D:不可中断 uninterruptible sleep
T:停止 stopped
Z:僵死zombie
名称:
PS
功能:
报告程序状况
用法:
ps[-aAcdefHjlmNVwy][acefhgLnrsSTuvxX][-C<指令名称>][-g<群组名称>][-G<群组号码>][-p<程序识别码>][p<程序识别码>][-s<阶段作业>][-t<终端机编号>][t<终端机号码>][-u<用户识别码>][-U<用户识别码>][U<用户名称>][-<程序识别码>][--cols<每行字符数>][--columns<每列字符数>][--cumulative][--deselect][--forest][--headers][--help][--info][--lines<显示列数>][--no-headers][--group<群组名称>][-Group<群组识别码>][--pid<程序识别码>][--rows<显示列数>][--sid<阶段作业>][--tty<终端机编码>][--user<用户名称>][--User<用户识别码>][--version][--width<每列字符数>]
参数:
-a 显示所有终端机下执行的程序,除了阶段作业领导者之外。
a 显示现行终端机下的所有程序,包括其他用户的程序。
-A 显示所有程序。
-c 显示CLS和PRI栏位。
c 列出程序时,显示每个程序真正的指令名称,而不包含路径、参数或常驻服务的标示。
-C<指令名称> 指定执行指令的名称,并列出该指令的程序的状况。
-d 显示所有程序,但不包含阶段作业领导者程序。
-e 此参数的效果和指定‘A’参数相同。
e 列出程序时,显示每个程序所使用的环境变量。
-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<每行字符数> 设置没列的最大字符数。
--headers 重复显示标题列。
--help 在线帮忙。
--info 显示排错信息。
--lines<显示列数> 设置显示画面的列数。
范例:
ps:
1
2
3
4
|
[root@qiufengsong ~]
# ps
PID TTY TIME CMD
3414 pts
/1
00:00:00
bash
3431 pts
/1
00:00:00
ps
|
显示所有进程信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
[root@qiufengsong ~]
# ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd
/0
5 ? 00:00:00 kworker
/u
:0
6 ? 00:00:01 migration
/0
7 ? 00:00:00 watchdog
/0
8 ? 00:00:00 migration
/1
10 ? 00:00:00 ksoftirqd
/1
11 ? 00:00:00 watchdog
/1
12 ? 00:00:00 cpuset
13 ? 00:00:00 khelper
14 ? 00:00:00 kdevtmpfs
15 ? 00:00:00 netns
16 ? 00:00:00 xenwatch
17 ? 00:00:00 xenbus
18 ? 00:00:00 sync_supers
19 ? 00:00:00 bdi-default
20 ? 00:00:00 kintegrityd
21 ? 00:00:00 kblockd
22 ? 00:00:00 ata_sff
23 ? 00:00:00 khubd
24 ? 00:00:00 md
26 ? 00:00:00 khungtaskd
27 ? 00:00:03 kswapd0
28 ? 00:00:00 ksmd
29 ? 00:00:00 fsnotify_mark
30 ? 00:00:00 crypto
##########省略部分##########
[root@qiufengsong ~]
# ps -e
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd
/0
5 ? 00:00:00 kworker
/u
:0
6 ? 00:00:01 migration
/0
7 ? 00:00:00 watchdog
/0
8 ? 00:00:00 migration
/1
10 ? 00:00:00 ksoftirqd
/1
11 ? 00:00:00 watchdog
/1
12 ? 00:00:00 cpuset
13 ? 00:00:00 khelper
14 ? 00:00:00 kdevtmpfs
15 ? 00:00:00 netns
16 ? 00:00:00 xenwatch
17 ? 00:00:00 xenbus
18 ? 00:00:00 sync_supers
19 ? 00:00:00 bdi-default
20 ? 00:00:00 kintegrityd
|
显示指定用户的进程信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[root@qiufengsong ~]
# ps -u root
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd
/0
5 ? 00:00:00 kworker
/u
:0
6 ? 00:00:01 migration
/0
7 ? 00:00:00 watchdog
/0
8 ? 00:00:00 migration
/1
10 ? 00:00:00 ksoftirqd
/1
11 ? 00:00:00 watchdog
/1
12 ? 00:00:00 cpuset
13 ? 00:00:00 khelper
14 ? 00:00:00 kdevtmpfs
15 ? 00:00:00 netns
[root@qiufengsong ~]
# ps --user root
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd
/0
5 ? 00:00:00 kworker
/u
:0
6 ? 00:00:01 migration
/0
7 ? 00:00:00 watchdog
/0
8 ? 00:00:00 migration
/1
10 ? 00:00:00 ksoftirqd
/1
11 ? 00:00:00 watchdog
/1
12 ? 00:00:00 cpuset
13 ? 00:00:00 khelper
14 ? 00:00:00 kdevtmpfs
15 ? 00:00:00 netns
|
详细显示程序的状况:
1
2
3
4
5
6
7
8
|
[root@qiufengsong ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4
S
0
3543
3538
0
80
0
-
27086
wait pts/
3
00
:
00
:
00
bash
0
R
0
3559
3543
0
80
0
-
27031
- pts/
3
00
:
00
:
00
ps
[root@qiufengsong ~]# ps -ly
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S
0
3543
3538
0
80
0
1876
27086
wait pts/
3
00
:
00
:
00
bash
R
0
3565
3543
0
80
0
912
27031
- pts/
3
00
:
00
:
00
ps
|
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user(超级用户)
S 代表这个程序的状态 (STAT)
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写
NI 这个是Nice值
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 下达的指令
列出目前所有的正在内存当中程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[root@qiufengsong ~]
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 19276 1508 ? Ss 05:02 0:02
/sbin/init
root 2 0.0 0.0 0 0 ? S 05:02 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 05:02 0:00 [ksoftirqd
/0
]
root 5 0.0 0.0 0 0 ? S 05:02 0:00 [kworker
/u
:0]
root 6 0.0 0.0 0 0 ? S 05:02 0:01 [migration
/0
]
root 7 0.0 0.0 0 0 ? S 05:02 0:00 [watchdog
/0
]
root 8 0.0 0.0 0 0 ? S 05:02 0:00 [migration
/1
]
root 10 0.0 0.0 0 0 ? S 05:02 0:00 [ksoftirqd
/1
]
root 11 0.0 0.0 0 0 ? S 05:02 0:00 [watchdog
/1
]
root 12 0.0 0.0 0 0 ? S< 05:02 0:00 [cpuset]
root 13 0.0 0.0 0 0 ? S< 05:02 0:00 [khelper]
root 14 0.0 0.0 0 0 ? S 05:02 0:00 [kdevtmpfs]
root 15 0.0 0.0 0 0 ? S< 05:02 0:00 [netns]
root 16 0.0 0.0 0 0 ? S 05:02 0:00 [xenwatch]
root 17 0.0 0.0 0 0 ? S 05:02 0:00 [xenbus]
root 18 0.0 0.0 0 0 ? S 05:02 0:00 [sync_supers]
root 19 0.0 0.0 0 0 ? S 05:02 0:00 [bdi-default]
root 20 0.0 0.0 0 0 ? S< 05:02 0:00 [kintegrityd]
root 21 0.0 0.0 0 0 ? S< 05:02 0:00 [kblockd]
####通常与grep联合使用查找特定进程####
[root@qiufengsong ~]
# ps aux | grep ssh
root 1090 0.0 0.2 64164 1196 ? Ss 05:03 0:00
/usr/sbin/sshd
root 1513 0.2 0.9 98016 4048 ? Ss 05:05 0:16 sshd: root@pts
/0
root 3410 0.0 0.9 97908 3880 ? Ss 06:16 0:00 sshd: root@pts
/1
root 3437 0.1 0.9 98052 3876 ? Ss 06:23 0:01 sshd: root@pts
/2
root 3538 0.0 0.9 97908 3880 ? Ss 06:26 0:00 sshd: root@pts
/3
root 3597 0.4 0.9 97908 3880 ? Ss 06:35 0:00 sshd: root@pts
/4
root 3630 0.0 0.2 103288 832 pts
/3
S+ 06:37 0:00
grep
ssh
|
USER 该进程属于那个使用者账号的
PID 该进程的号
%CPU 该进程使用掉的 CPU 资源百分比
%MEM 该进程所占用的物理内存百分比
VSZ 该进程使用掉的虚拟内存量(KB)
RSS 该进程占用的固定的内存量(KB)
TTY 该进程是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT 该程序目前的状态,主要的状态有
R 该程序目前正在运作,或者是可被运作
S 该程序目前正在睡眠当中,但可被某些讯号唤醒。
T 该程序目前正在侦测或者是停止了
Z 该程序应该已经终止,但是其父程序却无法正常的终止他,造成僵死程序的状态
START 该进程被触发启动的时间
TIME 该进程实际使用CPU运作的时间
COMMAND 该程序的实际指令
与其他函数联系使用:
1
2
3
4
5
6
|
[root@qiufengsong ~]
# ps aux | grep ssh
root 1483 0.0 0.2 64164 1152 ? Ss 06:41 0:00
/usr/sbin/sshd
root 1737 3.4 0.9 97908 3876 ? Ss 06:41 0:01 sshd: root@pts
/1
root 1927 0.0 0.2 103288 832 pts
/1
S+ 06:42 0:00
grep
ssh
[root@qiufengsong ~]
# ps aux | grep ssh | wc -l
3
|
说明:
ps是用来报告程序执行状况的指令,可以搭配kill指令随时中断,删除不必要的程序。
更多关于kill指令的介绍请关注下篇博文。