Linux renice 命令详解与用法
renice 是 Linux 中用于调整正在运行进程的优先级的命令,与 nice 命令(用于启动进程时指定优先级)互补,核心作用是修改已存在进程的nice值,从而改变进程获取CPU资源的优先级。
一、核心概念:nice值与进程优先级
Linux 进程的CPU调度优先级由nice值决定,范围是 -20(最高优先级)~ 19(最低优先级),默认值为0。
- • nice值越小,进程优先级越高,获取CPU资源的机会越多;
- • nice值越大,进程优先级越低,对其他进程的影响越小;
- • 普通用户只能提高自己进程的nice值(如从0→5,降低优先级),不能降低(如从0→-1,提升优先级),也不能修改其他用户的进程;
- • root用户(超级用户) 可以修改任何进程的nice值,无限制。
二、renice 命令基本语法
1. 标准语法
renice [优先级] [选项] [进程/用户/组标识]
2. 关键选项
| |
-p | 后面跟进程ID(PID),默认选项(省略时即为按PID修改) |
-u | 后面跟用户名/UID,修改该用户的所有进程的优先级 |
-g | |
-n | (部分系统支持)指定优先级增量(如-n 5表示nice值+5,-n -3表示nice值-3),替代直接写优先级 |
-h | |
3. 权限说明
- • 普通用户:仅能修改自身属主的进程,且只能将nice值调大(降低优先级);
- • root用户:无限制,可修改任何用户的任何进程,可自由调整nice值(调大/调小)。
三、常用用法示例
前置准备:查看进程的nice值
先通过ps/top命令查看目标进程的PID和当前nice值,方便后续调整:
# 方法1:ps 查看指定进程(如python进程)的PID和nice值(ni列)
ps -l -C python
# 方法2:top 实时查看,按P按CPU优先级排序,ni列为nice值,pid列为进程ID
top
# 方法3:直接查看进程状态文件(最准确)
cat /proc/[PID]/stat # 第19列即为nice值
示例1:修改单个进程的优先级(最常用)
语法:renice [新优先级] -p [PID](-p可省略)
# 示例:将PID为1234的进程nice值设为5(降低优先级,普通用户可执行)
renice 5 -p 1234
# 省略-p,效果相同
renice 5 1234
# root用户专属:将PID为1234的进程nice值设为-5(提升优先级)
sudo renice -5 -p 1234
示例2:修改某个用户的所有进程优先级
语法:renice [新优先级] -u [用户名/UID]
# 示例:将用户zhangsan的所有进程nice值设为8(普通用户仅能修改自己,root可修改所有)
sudo renice 8 -u zhangsan
# 按UID修改(如UID=1000)
sudo renice 8 -u 1000
示例3:修改某个用户组的所有进程优先级
语法:renice [新优先级] -g [组名/GID]
# 示例:将组名dev的所有进程nice值设为6
sudo renice 6 -g dev
# 按GID修改(如GID=1000)
sudo renice 6 -g 1000
示例4:按优先级增量调整(-n选项)
部分Linux发行版(如CentOS、Ubuntu)支持-n指定增量,无需计算最终nice值,直接调整:
# 示例1:PID=1234的进程nice值+3(如原0→3,降低优先级)
renice -n 3 -p 1234
# 示例2:root用户将PID=1234的进程nice值-4(如原0→-4,提升优先级)
sudo renice -n -4 -p 1234
示例5:同时修改多个进程的优先级
直接跟多个PID,用空格分隔:
# 将PID=1234、5678、9012的进程nice值均设为4
renice 4 -p 1234 5678 9012
四、常见错误与解决
错误1:普通用户尝试降低nice值(提升优先级)
renice -1 -p 1234
# 报错:renice: failed to set priority for 1234 (process ID): Operation not permitted
解决:仅root用户可执行,加sudo重新运行。
错误2:修改其他用户的进程(普通用户)
renice 5 -u root
# 报错:renice: failed to set priority for 进程ID: Operation not permitted
解决:加sudo以root身份执行。
错误3:指定的nice值超出范围(-20~19)
renice 20 -p 1234
# 报错:renice: invalid priority: 20
解决:将优先级调整到-20~19范围内。
五、renice 与 nice 的区别
| | | |
nice | 启动进程时 | 预知进程占用CPU高,启动时直接降低优先级(如大文件解压、编译) | |
renice | 修改已运行进程 | 进程运行中发现CPU占用过高,临时调整优先级,无需重启进程 | 普通用户仅能调大自身进程的nice值,root无限制 |
互补使用示例
# 1. nice 启动编译进程,初始nice值设为10(降低优先级,不影响其他操作)
nice -n 10 make -j4
# 2. 运行中发现仍占CPU过高,用renice将其PID(假设为9876)调至15
renice 15 -p 9876
六、实战场景:优化系统资源
场景1:后台大任务占用CPU过高,卡顿前台操作
当执行tar/unzip/编译/数据处理等后台任务时,CPU占用100%导致前台终端、桌面卡顿,可降低其优先级:
# 1. 查找大任务PID(如tar进程)
ps -ef | grep tar
# 2. 降低其优先级,nice值设为15
renice 15 -p [tar的PID]
场景2:核心业务进程(如数据库、服务)响应慢,提升优先级
root用户将核心进程(如MySQL、Nginx)的优先级提升,确保CPU资源优先分配:
# 1. 查找MySQL PID
ps -ef | grep mysqld | grep -v grep
# 2. 提升优先级,nice值设为-5
sudo renice -5 -p [MySQL的PID]
七、注意事项
- 1. 不要随意将进程nice值设为-20:最高优先级会抢占几乎所有CPU资源,可能导致系统其他进程(如系统服务、终端)无响应,仅对极核心的单进程临时使用;
- 2. renice修改的是进程的nice值,非实时优先级:Linux 调度分为普通进程(CFS调度,由nice值控制)和实时进程(SCHED_FIFO/SCHED_RR),
renice仅对普通进程有效; - 3. 子进程继承父进程nice值:用
renice修改父进程后,已创建的子进程不会同步修改,需单独调整子进程PID; - 4. 进程重启后nice值恢复默认:
renice是临时修改,进程重启后会回到默认nice值(0),若需永久生效,需在进程启动脚本中用nice指定初始值。
永久生效方法示例(Nginx)
编辑Nginx启动脚本,在启动命令前加nice -n [优先级]:
# 编辑启动脚本
vim /etc/init.d/nginx
# 找到启动行,添加nice
nice -n -3 /usr/sbin/nginx
# 保存后,重启Nginx即永久生效
service nginx restart
nice & renice 速查命令表
核心规则
nice值范围:-20(最高优先级)~ 19(最低优先级),默认0
✅ root:可修改任意进程,自由调整nice值(升/降)
❌ 普通用户:仅修改自身进程,只能调大nice值(降低优先级)
| | | | |
| nice | | | | |
| | nice -n 10 tar -zxvf bigfile.tar.gz | | |
| | sudo nice -n -5 /usr/sbin/mysqld | | |
| renice | | 基础语法:renice [新优先级] -p [PID] 示例:renice 15 -p 1234 | | -p |
| | 语法:renice -n [增量] -p [PID] 示例1(降优先级):renice -n 3 -p 1234 示例2(提优先级):sudo renice -n -4 -p 1234 | 增量为正:普通用户/root 增量为负:root专属 | |
| | 语法:renice [新优先级] -u [用户名/UID] 示例:sudo renice 8 -u zhangsan | | |
| | 语法:renice [新优先级] -g [组名/GID] 示例:sudo renice 6 -g dev | | |
| | 语法:renice [新优先级] -p PID1 PID2 PID3 示例:renice 4 -p 1234 5678 9012 | | |
| 辅助查询 | | ps -l -C [进程名]
| | |
| | top | | |
| | cat /proc/[PID]/stat | | |
高频排错
| | |
Operation not permitted | 1. 普通用户修改其他用户进程 2. 普通用户降低nice值(提优先级) | |
invalid priority: 20 | | |
| | renice仅对普通进程有效,实时进程需用chrt命令 |