功能描述
使用ps命令可以查看进程信息,可以正确有哪些进程正在运行及进程运行的状态、进程是否结束、进程有没有僵死,以及哪些进程占用了过多的资源等。
命令语法
ps [选项]
选项含义
ps命令的参数以及作用
选项
含义
-A
显示所有的进程
-N
选择除了那些符合指定条件的所有进程
-a
显示排除会话领导者和进程不与终端相关联的所有进程
-d
显示所有进程(排除会话领导者)
-e
显示所有的进程
-T
显示当前终端下的所有进程
a
所有的W/tty,包括其他用户
r
显示运行中的进程
x
处理w/o控制的ttys
-c
为-l选项显示不同的调度信息
c
列出进程时,显示每个进程真正的命令名称,而不包含路径、参数或常驻服务的标示
-C
按命令显示进程
-G
按真实的组群GID或者组群名显示进程
-U
按真实的用户UID或者用户名显示进程
-g
选择会话或有效的组名显示进程
-p
按进程ID显示进程
-s
显示指定会话ID的进程
-t
按终端显示进程
-u
按有效的用户UID显示进程
U
显示属于该用户的进程
t
按终端显示进程
-f
显示UID、PPID、C和STIME字段
-j或j
采用作业控制的格式显示进程
s
采用进程信号的格式显示进程
v
以虚拟内存的格式显示进程
-l或l
采用详细的格式显示进程
u
以面向用户的格式显示进程
P
显示指定进程号的进程,效果和-p选项相同,只在列表格式方面不同
L
列出输出字段的相关信息
f
用ASCII字符显示树状结构,表达进程间的相互关系
r
只显示正在运行的进程
e
列出进程时,显示每个进程所使用的环境变量
-w或w
按宽格式显示输出
-u
打印用户格式,显示用户名和进程的起始时间
-x
显示不带控制终端的进程
-t
显示指定终端编号的进程
n
以数字来表示USER和WCHAN字段
h
不显示标题列
-H
显示树状结构,表示进程间的相互关系
-m或m
在进程后面显示线程
-y
配合-l选项使用时,不显示F(flag)输出字段,并以RSS字段代ADDR字段
Linux系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死于停止,其各自含义如下。
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即使用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在,直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
注意:
如前面所提到的,在Linux系统中的命令参数有长短格式之分,长格式和长格式之间不能合并,长格式和短格式之间也不能合并,但短格式和短格式之间是可以合并的,合并后保留一个-(减号)即可。另外PS命令可允许参数不加减号(-),因此可直接写成ps aux 的样子。
输出字段
字段描述
USER
进程所有者的用户名
PID
进程号,可以用来惟一标识该进程
%CPU
进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
%MEM
进程使用内存的百分比
VSZ
进程使用的虚拟内存大小,以KB为单位
RSS
进程占用的物理内存的总数量,以KB为单位
TTY
进程相关的终端名
STAT
进程的状态
R:表示运行或准备运行
S:表示睡眠状态
I:表示空闲
Z:表示冻结
D:表示不间断睡眠
W:表示进程没有驻留页
T:表示停止或跟踪
START
进程开始运行时间
TIME
进程使用的总CPU时间
COMMAND
被执行的命令行
例
显示所有的进程
[root@localhost ~]# ps -e
PID TTY TIME CMD
1 ? 00:02:32 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:15 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:04 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:03:28 rcu_sched
10 ? 00:00:11 watchdog/0
11 ? 00:00:13 watchdog/1
12 ? 00:00:20 migration/1
13 ? 00:00:11 ksoftirqd/1
15 ? 00:00:00 kworker/1:0H
17 ? 00:00:00 kdevtmpfs
18 ? 00:00:00 netns
19 ? 00:00:00 khungtaskd
20 ? 00:00:00 writeback
21 ? 00:00:00 kintegrityd
22 ? 00:00:00 bioset
23 ? 00:00:00 kblockd
24 ? 00:00:00 md
30 ? 00:00:16 kswapd0
31 ? 00:00:00 ksmd
32 ? 00:00:17 khugepaged
显示所有不带控制台终端的进程,并显示用户名和进程的起始时间
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 193700 4620 ? Ss 2月18 2:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 2月18 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2月18 0:15 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2月18 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2月18 0:04 [migration/0]
root 8 0.0 0.0 0 0 ? S 2月18 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 2月18 3:28 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 2月18 0:11 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 2月18 0:13 [watchdog/1]
root 12 0.0 0.0 0 0 ? S 2月18 0:20 [migration/1]
root 13 0.0 0.0 0 0 ? S 2月18 0:11 [ksoftirqd/1]
root 15 0.0 0.0 0 0 ? S< 2月18 0:00 [kworker/1:0H]
root 17 0.0 0.0 0 0 ? S 2月18 0:00 [kdevtmpfs]
root 18 0.0 0.0 0 0 ? S< 2月18 0:00 [netns]
root 19 0.0 0.0 0 0 ? S 2月18 0:00 [khungtaskd]
root 20 0.0 0.0 0 0 ? S< 2月18 0:00 [writeback]
root 21 0.0 0.0 0 0 ? S< 2月18 0:00 [kintegrityd]
root 22 0.0 0.0 0 0 ? S< 2月18 0:00 [bioset]
查看crond进程是否正在运行
[root@localhost ~]# ps -ef|grep crond
root 32256 23644 0 16:15 pts/0 00:00:00 grep --color=auto crond
root 39059 1 0 2月22 ? 00:00:01 /usr/sbin/crond -n
//crond进程正在运行,其进程号为39059
显示当前系统进程
[root@localhost ~]# ps
PID TTY TIME CMD
23644 pts/0 00:00:00 bash
32359 pts/0 00:00:00 ps
在显示进程的时候显示用户名和进程的起始时间。
[root@localhost ~]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 11359 0.0 0.0 115388 1236 tty1 Ss+ 2月18 0:00 -bash
root 23644 0.0 0.1 115444 2152 pts/0 Ss 13:23 0:00 -bash
root 32398 0.0 0.0 151112 1840 pts/0 R+ 16:17 0:00 ps -u
显示root用户的进程
[root@localhost ~]# ps -u root
PID TTY TIME CMD
1 ? 00:02:32 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:15 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
7 ? 00:00:04 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:03:28 rcu_sched
10 ? 00:00:11 watchdog/0
11 ? 00:00:13 watchdog/1
12 ? 00:00:20 migration/1
13 ? 00:00:11 ksoftirqd/1
15 ? 00:00:00 kworker/1:0H
17 ? 00:00:00 kdevtmpfs
18 ? 00:00:00 netns
19 ? 00:00:00 khungtaskd
显示tty1终端下的进程
[root@localhost ~]# ps -t tty1
显示进程号为39059的进程
[root@localhost ~]# ps -p 39059
PID TTY TIME CMD
39059 ? 00:00:01 crond