Linux 进程管理:ps、top、kill、nice 一文讲清
Linux 进程管理:ps、top、kill、nice 一文讲清
1. 前言
在 Linux 中,程序运行起来之后就是进程。
进程管理是 Linux 运维、后端部署、嵌入式开发中的基础能力。
本文重点讲清楚:
ps # 查看进程快照
top # 实时查看进程状态
kill # 给进程发送信号
nice # 设置进程优先级
renice # 修改运行中进程优先级
2. 什么是进程
程序是磁盘上的可执行文件。
进程是程序运行后的实例。
例如:
/usr/sbin/nginx
是一个程序。
当 Nginx 启动后,系统中会出现 nginx 进程。
查看:
ps -ef | grep nginx
一个程序可以有多个进程。
Nginx 常见结构是一个 master 进程加多个 worker 进程。
3. PID 和 PPID
每个进程都有一个 PID。
| 名称 | 含义 |
|---|---|
| PID | 进程 ID |
| PPID | 父进程 ID |
查看当前 shell 的 PID:
echo $$
查看 PID 为 1 的进程:
ps -p 1 -f
现代 Linux 中,PID 1 通常是:
systemd
它是系统服务管理的核心进程。
4. 进程状态
常见进程状态:
| 状态 | 含义 |
|---|---|
R |
Running,运行中或可运行 |
S |
Sleeping,可中断睡眠 |
D |
不可中断睡眠,常见于 IO 等待 |
T |
Stopped,暂停 |
Z |
Zombie,僵尸进程 |
需要重点关注:
D状态多,可能是磁盘或网络 IO 卡住;Z状态多,可能是父进程没有回收子进程;R状态过多,可能 CPU 压力较高。
5. ps:查看进程快照
最常用:
ps -ef
示例:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:00 ? 00:00:02 /sbin/init
user 2345 1234 0 09:20 pts/0 00:00:00 bash
字段说明:
| 字段 | 含义 |
|---|---|
| UID | 用户 |
| PID | 进程 ID |
| PPID | 父进程 ID |
| STIME | 启动时间 |
| TTY | 关联终端 |
| TIME | 累计 CPU 时间 |
| CMD | 启动命令 |
另一种常用写法:
ps aux
它会显示 CPU、内存占用:
ps aux --sort=-%cpu | head
ps aux --sort=-%mem | head
查找进程:
ps -ef | grep nginx
pgrep nginx
pidof nginx
6. pstree:查看进程树
查看父子进程关系:
pstree
带 PID:
pstree -p
查看某个进程树:
pstree -p 1
这对分析服务结构非常有用。
7. top:实时监控进程
运行:
top
常见字段:
| 字段 | 含义 |
|---|---|
| PID | 进程 ID |
| USER | 用户 |
| PR | 优先级 |
| NI | nice 值 |
| VIRT | 虚拟内存 |
| RES | 物理内存 |
| S | 状态 |
| %CPU | CPU 占用 |
| %MEM | 内存占用 |
| COMMAND | 命令 |
top 常用快捷键:
| 快捷键 | 作用 |
|---|---|
P |
按 CPU 排序 |
M |
按内存排序 |
T |
按运行时间排序 |
1 |
显示每个 CPU 核心 |
k |
杀进程 |
r |
修改 nice 值 |
q |
退出 |
8. kill:给进程发送信号
kill 不只是杀死进程,它本质是向进程发送信号。
基本格式:
kill [信号] PID
常见信号:
| 信号 | 编号 | 作用 |
|---|---|---|
| SIGTERM | 15 | 请求进程正常退出 |
| SIGKILL | 9 | 强制杀死进程 |
| SIGHUP | 1 | 常用于重载配置 |
| SIGINT | 2 | 中断,类似 Ctrl+C |
| SIGSTOP | 19 | 暂停 |
| SIGCONT | 18 | 继续 |
默认:
kill 1234
等价于:
kill -15 1234
如果进程不退出,再考虑:
kill -9 1234
不要一上来就 kill -9。
因为进程没有机会清理资源,可能导致临时文件、锁文件、数据状态异常。
9. killall 和 pkill
按名称结束进程:
killall nginx
pkill nginx
按用户结束进程:
pkill -u username
这类命令可能匹配多个进程,使用前最好先确认:
pgrep -a nginx
10. nice:启动时设置优先级
Linux 进程有 nice 值。
nice 值范围通常是:
-20 到 19
含义:
nice 越小,优先级越高
nice 越大,优先级越低
以较低优先级运行备份任务:
nice -n 10 tar -czf backup.tar.gz /data
这样可以减少对其他服务的影响。
11. renice:修改运行中进程优先级
查看某进程 nice 值:
ps -o pid,ni,comm -p 1234
修改 nice 值:
renice 10 -p 1234
普通用户通常只能把 nice 调大,也就是降低优先级。
root 可以设置更高优先级。
12. 常见排查场景
12.1 查看服务是否运行
ps -ef | grep nginx
pgrep -a nginx
systemctl status nginx
12.2 查看 CPU 占用最高进程
top
按 P。
或者:
ps aux --sort=-%cpu | head
12.3 查看内存占用最高进程
top
按 M。
或者:
ps aux --sort=-%mem | head
12.4 杀死卡死进程
ps -ef | grep app
kill PID
kill -9 PID
推荐先 kill,再 kill -9。
13. 小结
进程管理可以总结为:
ps:看快照
top:看实时状态
kill:发信号
nice:设置启动优先级
renice:修改运行中进程优先级
常用命令:
ps -ef
ps aux
top
pstree -p
pgrep -a nginx
kill 1234
kill -9 1234
nice -n 10 command
renice 10 -p 1234
掌握这些命令后,可以完成大多数 Linux 进程查看、资源排查和进程控制工作。
更多推荐




所有评论(0)