当你的服务器卡死、CPU飙到100%、内存爆满、程序毫无响应时——别慌。几乎所有这类问题的根源,都指向同一个东西:进程。
Linux 有一句经典设计哲学:一切皆文件。
而从运行的视角来看,所有正在执行的程序,最终都会以进程的形式存在。不信你看——终端是进程,Nginx 是进程,数据库是进程,甚至你背后那个Docker也是进程。

因此,当服务器出现CPU 100%满载、内存耗尽、程序卡死等故障时,根本原因几乎都与进程管理有关。
今天,我们将深入探讨四个与进程管理密切相关的核心工具:ps、top、htop、kill。
一、什么是进程?
更准确的定义是:进程 = 程序的一次运行实例。
它可能处于运行、睡眠、等待IO、暂停等多种状态。例如,在终端输入 ls,系统就会创建一个进程、执行命令、然后退出。而像 Nginx、MySQL 这类服务,则是启动后长期运行、持续占用资源的常驻进程。
二、ps —— 查看进程静态快照
ps(process status)的作用,就是捕捉你执行命令那一瞬间,系统中所有进程的静态快照。
1. 常用命令
查看所有进程:
ps aux
字段解释:
- USER:进程所有者
- PID:进程ID
- %CPU:CPU使用率
- %MEM:内存使用率
- VSZ/RSS:虚拟内存和常驻内存
- STAT:进程状态
- START:启动时间
- TIME:累计CPU时间
- COMMAND:执行的命令
2. 常见 STAT 状态
最需要警惕的是状态 Z,也就是僵尸进程。当子进程已结束、但父进程还未回收资源时,就会出现僵尸进程。
三、zsh 踩坑:grep [n]ginx 报错
很多教程里都会写:
ps aux | grep [n]ginx
但这个写法在 zsh 环境下会报错:
zsh: no matches found
原因是 zsh 会把 [n] 当成文件通配符(glob)。如果当前目录没有匹配的文件,就直接报错。正确的写法(zsh 环境)应该是:
ps aux | grep "[n]ginx"
或者更干脆一些:
pgrep -a nginx
说实话,现代运维更推荐用 pgrep,而不是折腾那些 grep 的花哨技巧。
四、top —— 实时监控进程
服务器异常,第一步永远是:top。
1. load average
例如输出:load average: 1.20 0.85 0.60
分别代表 1 分钟、5 分钟、15 分钟的平均等待 + 运行进程数。换言之,过去1分钟里,你的Linux系统里“等待CPU运行 + 正在CPU上运行”的进程平均有1.2个。
对于单核CPU,load ≈ 1 就意味着基本满负载了。但对于多核CPU,比如4核,负载4.0才算满负载,负载2.0只相当于用了50%。但要注意:负载高于核心数,不一定就卡死,还得看它是 CPU 繁忙还是 IO 阻塞。

2. CPU 使用率
重点关注:
- us(用户):用户态程序消耗
- sy(系统):内核态消耗
- id(空闲):CPU 空闲比例
id 越低,说明 CPU 越繁忙。
3. 内存
关注 used、free、buff/cache。这几个字段能帮你判断是物理内存不够,还是缓存占用的内存可以释放。

五、htop —— 更友好的监控工具
如果觉得 top 的界面过于简陋,那就试试 htop。安装(CentOS Stream):
dnf install htop -y # 需 root 权限
非 root:sudo dnf install htop -y
运行后,彩色界面、鼠标操作、甚至直接杀进程,体验比 top 好太多。

六、kill —— 终止进程
当你确认必须干掉某个进程时,就用 kill PID。默认发送的是 SIGTERM (15),这是“优雅终止”信号。进程收到后,会尝试清理资源——比如关闭文件、释放连接——再退出。
1. 常见信号
- SIGTERM (15):优雅终止,允许进程做清理
- SIGKILL (9):强制终止,不可捕获、不执行清理,可能损坏数据
2. 不要随便 kill -9
许多人一遇到问题就急于使用 kill -9 PID,但这并不推荐。因为它不可捕获、不执行清理,很容易导致数据损坏。正确的顺序是:先用 kill,无效了再 kill -9。这一点必须时刻警惕。
七、标准排查流程
服务器变慢时,按步骤来:
(1) 第一步:top
(2) 第二步:记录异常 PID
(3) 第三步:ps -fp PID,确认进程来源
(4) 第四步(重要):确认是否为非核心进程。不要误杀 systemd、sshd 这些关键系统服务。
(5) 第五步:优雅终止:kill PID
八、必须理解的核心
进程有 PID,存在父子关系。如果服务由 systemd 管理,且开启了自动重启策略,被 kill 后可能自动重启。另外,kill 的本质是发送信号,不是“杀”进程。
九、四个命令定位
一句话总结:ps 看全局,top 看动态,htop 更好用,kill 做决策。
十、结论
掌握进程管理,是从“会用 Linux”到“会维护 Linux”的第一步。别小看这4个命令,很多线上问题的根因,都藏在这一行行进程信息里。
