banner
约 1,200 字
4 分钟

Linux 进程管理教程:ps、top 与 kill 实战

摘要

服务器上程序卡死、CPU 被吃满怎么办?本教程依据 procps-ng 官方手册整理,介绍 ps 查看与排序进程、top/htop 实时监控、kill 信号的正确用法(先 TERM 后 KILL)、前后台切换与 nohup,以及用 lsof 排查端口占用。

Linux 进程管理教程:ps、top 与 kill

服务器上程序卡死了、CPU 被某个进程吃满了、想找到某个服务在跑没跑——这些都属于进程管理的日常。本教程依据 procps-ng 官方手册与 util-linux 文档整理,覆盖 ps、top、kill、nohup 等核心命令。

一、查看进程:ps

ps aux 是最常用的快照命令(BSD 风格参数):

bash
ps aux                    # 所有用户的全部进程
ps aux | grep nginx       # 过滤出 nginx 相关进程
ps aux --sort=-%cpu | head    # 按 CPU 占用降序取前几名
ps aux --sort=-%mem | head    # 按内存占用降序

输出关键列:PID 进程号、%CPU/%MEM 占用、STAT 状态(R 运行、S 睡眠、Z 僵尸)、COMMAND 命令名。

树状查看父子关系:

bash
pstree -p            # 树状显示,带 PID
ps -ef --forest      # 同样是树状结构

二、实时监控:top 与 htop

bash
top

top 内的常用按键:

按键

作用

P

按 CPU 排序

M

按内存排序

k

输入 PID 杀进程

1

展开显示每个核心

q

退出

htop 是 top 的彩色增强版(sudo apt install htop),支持鼠标点选、方向键滚动、F9 直接发信号,装一个绝对不亏。

三、终止进程:kill

kill 发的是"信号",不是单纯"杀":

bash
kill 1234            # 默认发 SIGTERM(15),请求正常退出
kill -9 1234         # SIGKILL,强制杀死(进程无法拦截,慎用)
kill -1 1234         # SIGHUP,常用于让服务重载配置
killall nginx        # 按名字杀所有同名进程
pkill -f "python app.py"   # 按命令行匹配杀

使用原则:先试默认的 TERM(给进程保存数据、善后的机会),不行再上 -9。对数据库这类服务直接 -9 可能丢数据。

四、前后台切换

在终端里,Ctrl+Z 可以把正在运行的程序暂停到后台,然后:

bash
jobs           # 查看后台任务
bg %1          # 让 1 号任务在后台继续跑
fg %1          # 调回前台

想让程序在断开 SSH 后也继续跑,用 nohup:

bash
nohup ./myapp &

输出会写到 nohup.out。不过更推荐用之前讲过的 systemd 服务来管理常驻程序。

五、其他实用命令

bash
uptime            # 开机时长与平均负载
free -h           # 内存使用
lsof -i :8080     # 谁占用了 8080 端口
kill $(lsof -t -i:8080)   # 直接杀掉占用 8080 端口的进程

lsof -i :端口 是排查"端口被占用"问题的标准动作。

六、总结

场景

命令

找进程

ps aux | grep 名字

看 CPU/内存占用

topP/M 排序)

正常终止

kill PID

强制终止

kill -9 PID(先试不带 -9)

杀端口占用者

kill $(lsof -t -i:端口)

断线后继续跑

nohup 命令 &

进程管理的核心套路就一句话:ps/top 找到 PID,kill 发对信号

END