进程管理
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
ps
查看当前系统进程状态
ps
:process status
进程状态
基本语法
ps aux | grep xxx
(功能描述:查看系统中所有进程)ps -ef | grep xxx
(功能描述:可以查看子父进程之间的关系)
选项说明
单纯的小写是BSD
风格,-小写
是UNIX
风格
选项 | 功能 |
---|---|
a | 列出带有终端的所有用户的进程 |
x | 列出当前用户的所有进程,包括没有终端的进程 |
u | 面向用户友好的显示风格 |
-e | 列出所有进程 |
-u | 列出某个用户关联的所有进程 |
-f | 显示完整格式的进程列表 |
功能说明
ps aux
显示信息说明
USER
:该进程是由哪个用户产生的
==PID
:进程的 ID
号==
==%CPU
:该进程占用 CPU
资源的百分比,占用越高,进程越耗费资源;==
==%MEM
:该进程占用物理内存的百分比,占用越高,进程越耗费资源;==VSZ
:该进程占用虚拟内存的大小,单位 KB
RSS
:该进程占用实际物理内存的大小,单位 KB
TTY
:该进程是在哪个终端中运行的。对于 CentOS
来说,tty1
是图形化终端,tty2-tty6
是本地的字符界面终端。pts/0-255
代表虚拟终端STAT
:进程状态。常见的状态有:R
:运行状态、S
:睡眠状态、T
:暂停状态、Z
:僵尸状态、s
:包含子进程、l
:多线程、+
:前台显示、<
:进程优先级很高、N
:比较低的优先级START
:该进程的启动时间TIME
:该进程占用 CPU
的运算时间,注意不是系统时间COMMAND
:产生此进程的命令名
ps -ef
显示信息说明
UID
:用户 ID
PID
:进程 ID
PPID
:父进程 ID
C
:CPU
用于计算执行优先级的因子。数值越大,表明进程是 CPU
密集型运算,执行优先级会降低;数值越小,表明进程是 I/O
密集型运算,执行优先级会提高STIME
:进程启动的时间TTY
:完整的终端名称TIME
:CPU
时间CMD
:启动进程所用的命令和参数
经验技巧
如果想查看进程的 CPU
占用率和内存占用率,可以使用 aux
;
如果想查看进程的父进程 ID
可以使用 ef
;
案例实操
查看sshd
进程对应父子关系
[root@host1 ~]# ps -ef | grep sshd
#由1号进程systemd启动的后台守护进程
root 1999 1 0 Apr07 ? 00:00:00 /usr/sbin/sshd -D
#虚拟出的终端,以root身份远程登录
root 29143 1999 0 11:07 ? 00:00:00 sshd: root@pts/0
#输入sshd这条命令产生的进程
root 31232 29146 0 11:47 pts/0 00:00:00 grep --color=auto sshd
查看进程状态
[root@host1 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-04-07 17:12:18 CST; 2 weeks 0 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1999 (sshd)
CGroup: /system.slice/sshd.service
└─1999 /usr/sbin/sshd -D
Apr 21 16:56:39 host1 sshd[5412]: Bad protocol version identification
... ...
kill
终止进程
基本语法
kill [选项] 进程号
(功能描述:通过进程号杀死进程)killall 进程名称
(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
选项说明
选项 | 功能 |
---|---|
-9 | 表示强迫进程立即停止 |
案例实操
杀死进程
[root@host1 ~]# ps -ef | grep sshd
root 1999 1 0 Apr07 ? 00:00:00 /usr/sbin/sshd -D
root 9709 29146 0 15:18 pts/0 00:00:00 grep --color=auto sshd
root 29143 1999 0 11:07 ? 00:00:00 sshd: root@pts/0,pts/1
[root@host1 ~]# kill 29143
SSH 121.37.133.169: session closed
按任意键重新连接
通过进程名称杀死进程
[root@host1 ~]# killall sshd
pstree
查看进程树
基本语法
pstree [选项]
选项说明
选项 | 功能 |
---|---|
-p | 显示进程的 PID |
-u | 显示进程的所属用户 |
案例实操
显示进程 pid
[root@host1 ~]# pstree -p
显示进程所属用户
[root@host1 ~]# pstree -u
top
实时监控系统进程状态
基本命令
top [选项]
选项说明
选项 | 功能 |
---|---|
-d 秒数 | 指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令 |
-i | 使 top 不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程 ID 来仅仅监控某个进程的状态。 |
操作说明
操作 | 功能 |
---|---|
P | 以 CPU 使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以 PID 排序 |
q | 退出 top |
查询结果字段解释
第一行信息为任务队列信息
内容 | 说明 |
---|---|
12:26:46 | 系统当前时间 |
up 1 day, 13:32 | 系统的运行时间,本机已经运行 1 天13 小时 32 分钟 |
2 users | 当前登录了两个用户 |
load average: 0.00, 0.00, 0.00 | 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于1,系统已经超出负荷。 |
第二行为进程信息
Tasks: 95 total | 系统中的进程总数 |
---|---|
1 running | 正在运行的进程数 |
94 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是 0,需要手工检查僵尸进程 |
第三行为 CPU 信息
Cpu(s): 0.1%us | 用户模式占用的 CPU 百分比 |
---|---|
0.1%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 系统模式占用的 CPU 百分比 |
99.7%id | 空闲 CPU 的 CPU 百分比 |
0.1%wa | 等待输入/输出的进程的占用 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.1%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st st(Steal time) | 虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比。 |
第四行为物理内存信息
Mem: 625344k total | 物理内存的总量,单位 KB |
---|---|
571504k used | 已经使用的物理内存数量 |
53840k free | 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了 628MB 内存,所以只有 53MB 的空闲内存了 |
65800k buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息
Swap: 524280k total | 交换分区(虚拟内存)的总大小 |
---|---|
0k used | 已经使用的交互分区的大小 |
524280k free | 空闲交换分区的大小 |
409280k cached | 作为缓存的交互分区的大小 |
案例实操
[root@host1 ~]# top -d 1
[root@host1 ~]# top -i
[root@host1 ~]# top -p 2575
执行上述命令后,可以按 P、M、N
对查询出的进程结果进行排序。
netstat
显示网络状态和端口占用信息
基本语法
netstat -anp | grep 进程号
(功能描述:查看该进程网络信息)netstat –nlp | grep 端口号
(功能描述:查看网络端口号占用情况)
选项说明
选项 | 功能 |
---|---|
-a | 显示所有正在监听(listen)和未监听的套接字(socket) |
-n | 拒绝显示别名,能显示数字的全部转化成数字 |
-l | 仅列出在监听的服务状态 |
-p | 表示显示哪个进程在调用 |
案例实操
通过进程号查看sshd
进程的网络信息
[root@host1 ~]# netstat -anp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1999/sshd
tcp 0 52 192.168.0.86:22 115.193.140.152:16917 ESTABLISHED 9806/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 1999/sshd
unix 3 [ ] STREAM CONNECTED 17967 1999/sshd
unix 2 [ ] DGRAM 422233 9806/sshd: root@pts
查看某端口号是否被占用
[root@host1 ~]# netstat -nltp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1999/sshd
tcp6 0 0 :::22 :::* LISTEN 1999/sshd