一、简介
ps命令用于报告当前系统的进程状态,ps命令同时也是个非常强大的进程查看命令,该命令可以查看到当前哪些进程在运行,进程的运行状态、进程占用的资源等等。ps命令结合kill命令可以随机终止异常的进程,这在日常维护中也是经常使用的一种手段。
二、ps命令的使用
1、命令格式
ps [options]
2、选项
ps命令的选项有三种风格:
1、UNIX格式,类似于-a;
2、BSD格式,如aux;
3、长选项,--help;
常用选项包括:
a:显示所有与终端相关的进程;
x:显示所有与终端无关的进程;
u:以用户为中心组织显示进程的状态信息;
-e:显示所有进程;
-f:显示进程的完整格式的信息;
-F:显示更详细的完整格式,比-f详细;
-H:以层级结构显示进程的相关信息;
-p PID1,PID2...:根据指定的PID显示对应的进程信息;
-u USER:显示指定用户的进程信息;
-o filter1,filter2...:自定义要显示的字段,各选项之间以,分隔;常用的filter包括:pid、ni、pri、command、psr、pcpu、stat、tty、ppid、rtprio等等;
常用的组合选项有:aux,-ef,-eFH,-eo,axo;
3、ps命令信息输出
[root@localhost ~]# ps aux | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 126104 5280 ? Ss 03:05 0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0.0 0.0 0 0 ? S 03:05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 03:05 0:01 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 03:05 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 03:05 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/0]
上述是ps命令的一个输出信息,其中比较直观的像USER、PID、CPU等这些就不是解释了,其他的输出状态分别指:
VSZ:虚拟内存集;
RSS:Resident Size,常驻内存集;
TTY:进程所属的终端是哪个;
STAT:进程的运行状态;
START:进程的启动时间;
TIME:进程的运行时间;
COMMAND:进程名;
C:表示CPU的利用率
PSR:表示CPU运行在哪个CPU之上;
其中STAT的常见状态有以下:
R:running;
S:interruptable sleeping;
D:uninterruptable sleeping;
T:Stopped;
Z:zombie;
+:前台进程;
l:多线程进程;
N:低优先级进程;
<:高优先级进程;
s:session leader;
三、使用案例
- 显示所有与用户相关的进程
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 126104 5292 ? Ss 03:05 0:05 /usr/lib/systemd/systemd --switched-root --syste
root 2 0.0 0.0 0 0 ? S 03:05 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 03:05 0:01 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 03:05 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 03:05 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/0]
root 10 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/1]
root 11 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/2]
root 12 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/3]
root 13 0.0 0.0 0 0 ? S 03:05 0:00 [rcuob/4]
...
- 通过进程ID显示相应的进程信息
[root@localhost ~]# ps -F -p 1768,30698
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1768 1 0 20640 2864 0 03:05 ? 00:00:00 /usr/sbin/sshd -D
root 30698 1768 0 35718 3664 0 10:06 ? 00:00:01 sshd: root@pts/0
- 自定义显示的输出格式
[root@localhost ~]# ps -e -o pmem,pcpu,pid,uname
%MEM %CPU PID USER
0.5 0.0 1 root
0.0 0.0 2 root
0.0 0.0 3 root
0.0 0.0 7 root
0.0 0.0 8 root
0.0 0.0 9 root
0.0 0.0 10 root
- 根据父进程ID查询子进程
[root@localhost ~]# ps -F --ppid 1768
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 30698 1768 0 35718 3664 0 10:06 ? 00:00:01 sshd: root@pts/0
root 38673 1768 0 35718 5000 0 11:11 ? 00:00:00 sshd: root@pts/1
- 根据用户查询其对应的进程信息
[root@localhost ~]# ps -f -u charlie
UID PID PPID C STIME TTY TIME CMD
charlie 42676 42670 0 12:00 ? 00:00:00 sshd: charlie@pts/2
charlie 42677 42676 0 12:00 pts/2 00:00:00 -bash
charlie 42772 42677 0 12:00 pts/2 00:00:00 ping www.baidu.com