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 进程查看、资源排查和进程控制工作。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐