Linux进程管理命令详解 – ps/top/kill/systemctl使用指南
Linux 进程管理是运维核心技能,服务器出问题第一时间就是看进程状态。
ps:查看进程
最基础的进程查看命令。
# 查看当前会话的进程
ps
# 查看所有进程(标准格式)
ps -e
# 查看所有进程(详细信息,最常用)
ps -ef
# BSD 风格,显示 CPU、内存占用
ps aux
# 查找特定进程
ps -ef | grep nginx
# 按用户过滤
ps -u www-data
# 按名称查找
ps -C nginx
# 显示进程树
ps -ef --forest
实战:找出占用 CPU 最高的 10 个进程:
ps aux --sort=-%cpu | head -11
top:实时进程监控
实时查看系统状态和进程信息,类似 Windows 任务管理器。
# 启动 top
top
# 只看某个用户的进程
top -u www-data
# 只看指定 PID
top -p 1234
进入 top 后的快捷键:
| 快捷键 | 作用 |
|——–|——|
| P | 按 CPU 占用排序 |
| M | 按内存占用排序 |
| N | 按 PID 排序 |
| T | 按运行时间排序 |
| 1 | 显示每个 CPU 核心状态 |
| k | 输入 PID 杀进程 |
| q | 退出 |
更现代的替代品:htop,界面更友好,支持鼠标操作。
# 安装
apt install htop # Debian/Ubuntu
yum install htop # CentOS/RHEL
# 使用
htop
kill:终止进程
# 正常终止(发送 SIGTERM,进程可清理后退出)
kill 1234
# 强制终止(发送 SIGKILL,立即结束)
kill -9 1234
# 发送 SIGTERM(默认信号)
kill -15 1234
# 重启进程(发送 SIGHUP)
kill -HUP 1234
# 按名称杀进程
killall nginx
# 按名称强制杀
killall -9 nginx
# 按名称+完整匹配杀
pkill -f "nginx: worker"
信号说明:
| 信号 | 编号 | 作用 |
|——|——|——|
| SIGHUP | 1 | 重启/重载配置 |
| SIGINT | 2 | 中断(Ctrl+C) |
| SIGTERM | 15 | 优雅终止 |
| SIGKILL | 9 | 强制终止 |
建议:先 kill 1234(优雅退出),不行再 kill -9 1234(强杀)。直接 -9 可能丢数据。
systemctl:服务管理
现代 Linux 系统服务管理工具(systemd)。
# 启动服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重启服务
systemctl restart nginx
# 重载配置(不中断连接)
systemctl reload nginx
# 查看状态
systemctl status nginx
# 开机自启
systemctl enable nginx
# 禁止开机自启
systemctl disable nginx
# 查看所有已启动的服务
systemctl list-units --type=service --state=running
# 查看启动失败的服务
systemctl --failed
实用组合:
# 修改 Nginx 配置后测试并重载
nginx -t && systemctl reload nginx
# 查看服务日志(最近50行)
journalctl -u nginx -n 50
# 实时查看服务日志
journalctl -u nginx -f
jobs / fg / bg:后台任务管理
# 运行命令并放到后台
long_task.sh &
# 输出:[1] 12345([1]是作业号,12345是PID)
# 查看后台任务
jobs
# 输出:[1]+ Running long_task.sh &
# 把后台任务调到前台
fg %1
# 前台任务放到后台(先 Ctrl+Z 暂停)
bg %1
# 后台任务不受终端关闭影响
nohup long_task.sh &
# 输出会被写到 nohup.out
nohup 用法:服务器跑长任务必备,SSH 断开后任务继续。
# 后台运行并指定日志文件
nohup python3 server.py > /var/log/server.log 2>&1 &
进程资源占用排查
找出占用 CPU 最高的进程
# 方法一:ps
ps aux --sort=-%cpu | head -10
# 方法二:top
top -o %CPU
找出占用内存最高的进程
ps aux --sort=-%mem | head -10
找出占用磁盘 IO 最高的进程
# 安装 iotop
apt install iotop
# 查看磁盘 IO
iotop
查看进程打开的文件
# 查看指定进程打开的文件
lsof -p 1234
# 查看占用 80 端口的进程
lsof -i:80
# 查看某个文件被哪个进程占用
lsof /var/log/nginx/error.log
总结
| 命令 | 作用 | 典型场景 |
|——|——|———|
| ps | 查看进程快照 | 排查问题 |
| top/htop | 实时监控 | 持续观察 |
| kill | 终止进程 | 处理僵死进程 |
| systemctl | 管理服务 | 启停服务 |
| jobs/fg/bg | 后台任务 | 长任务管理 |
| lsof | 查看文件占用 | 排查端口/文件占用 |
服务器出问题时的标准排查流程:top 看整体 → ps 定位进程 → kill 处理异常 → systemctl 重启服务 → journalctl 查日志。