linux中进程调度优先级由nice值决定,范围-20至+19,默认0;普通用户只能调高(降低优先级),root可调低(提升优先级);nice用于启动新进程,renice用于动态调整运行中进程;实际效果受cfs调度、系统负载及cgroup等影响。

Linux中进程的调度优先级可以通过nice和renice命令调整,核心在于理解“nice值”与实际调度优先级(即内核使用的priority)之间的关系——nice值越大,进程越“谦让”,获得CPU时间越少;越小(最小为-20),越“抢占”,优先级越高。
理解Nice值范围与权限限制
nice值范围是-20到+19,默认为0。普通用户只能调高nice值(即降低优先级,如设为5、10),不能设为负数;只有root用户才能调低nice值(提高优先级)。系统通过/proc/sys/kernel/nice_default和/proc/sys/kernel/nice_min等参数控制行为,但通常无需修改。
- 普通用户执行
nice -n -5 command会失败,提示“Permission denied” - root可运行
nice -n -15 sleep 300,启动一个高优先级的sleep进程 - 查看进程nice值:用
ps -o pid,ni,comm -p <pid></pid>或top按Shift+N排序
使用Nice启动新进程
nice只对新启动的进程生效,语法为nice [选项] [命令]。常用的是-n指定nice值。
- 让后台压缩任务“谦让”:
nice -n 10 tar -cf archive.tar /large/directory - 避免影响交互体验:在桌面环境中运行计算密集型脚本时,加
nice -n 15 ./heavy_script.sh - 不加
-n时,nice 5 cmd等价于nice -n 5 cmd,但建议显式写-n更清晰
用Renice动态调整正在运行的进程
renice用于修改已有进程、进程组或用户的nice值,支持按PID、PGID或用户名操作。
- 调低某个耗CPU进程的优先级:
renice +10 12345(PID为12345的进程nice值增加10) - 批量降低某用户所有进程优先级:
renice +5 -u username - 降低整个进程组(如shell及其子进程):
renice +8 -g 1234(1234为PGID) - 执行后可用
ps -o pid,ni,comm | grep target验证是否生效
注意实际调度效果与常见误区
nice值影响的是CFS(完全公平调度器)下的虚拟运行时间计算,并非硬实时保证。它只在CPU资源争抢时起作用;空闲系统中,高低nice值的进程几乎无差异。
- 设置nice=-20不等于“独占CPU”,其他高优先级进程(如实时进程
chrt -f)仍可能抢占 - IO密集型进程受nice影响较小,因其大部分时间在等待磁盘/网络,而非争抢CPU
- 容器环境(如Docker)中,cgroup的cpu.shares等限制可能覆盖nice效果,需综合评估
- 监控时注意区分
NI(nice值)和PR(priority字段):PR = NI + 20(在ps中),而内核真正用的是static_prio,一般不用手动算











