nice值是Linux中决定进程CPU时间分配权重的整数(-20到+19),值越小优先级越高;普通用户只能调高nice值(降低优先级),仅root可调低nice值提升优先级。

普通用户只能降低自己进程的优先级(即调高 nice 值),不能提升;只有 root 才能调低 nice 值(即提高调度优先级)。
什么是 nice 值?它怎么影响进程调度
nice 值是 Linux 进程调度器用来决定 CPU 时间分配权重的一个整数,范围是 -20 到 +19。数值越小,进程“越受宠”,越容易被调度执行;数值越大,越“谦让”,CPU 时间越少。
注意:nice 值不是实时优先级(rt_priority),也不等同于 PR 列显示的值(ps 中的 NI 列才是真正的 nice 值)。内核实际使用的是 static_prio,它由 nice 映射而来(static_prio = nice + 120)。
-
nice = -20→ 最高用户态优先级(仅 root 可设) -
nice = 0→ 默认启动优先级 -
nice = +19→ 最低优先级(所有用户都可设)
启动时用 nice 设置优先级
在命令前加 nice,适用于新进程。它只对子进程生效,不影响当前 shell。
常见用法:
-
nice -n 10 command:以nice=10启动command -
nice --15 long_running_script.sh:注意双横线写法等价于-n -15,但需 root 权限 - 不加
-n也能用:nice 5 sleep 10等价于nice -n 5 sleep 10
错误示范:
nice -20 firefox # 普通用户会报错:Permission denied
这是因为 -20 超出普通用户权限范围(默认只允许 0~19)。
运行中用 renice 动态调整
renice 修改已有进程的 nice 值,支持按 PID、用户或组批量调整。
关键限制和行为:
- 普通用户只能对自己拥有的进程调用
renice,且只能调高nice值(即让进程更谦让) - root 可以任意修改任何进程的
nice,包括降值(如从 5 改为 -5) - 对整个用户的所有进程生效:
renice +10 -u username - 对进程组生效:
renice -n 5 -g 1234
示例:
renice -n 15 12345 # 把 PID 12345 的 nice 设为 15 renice -n -5 -p 12345 # 需 root;把该进程优先级提高
注意:renice 不会中断进程,但新调度策略下一次调度周期就会生效。
查看进程 nice 值的正确方式
别只看 ps 输出里的 PR 列——那是实时优先级(含实时进程标记),容易误导。真正要看的是 NI 列。
推荐命令:
-
ps -o pid,ni,comm -p 12345:精准查单个进程的nice值 -
top→ 按r键可交互式 renice(同样受权限限制) -
htop→ F7/F8 更直观,但底层仍是调用renice
一个易错点:某些系统上 ps aux 默认不显示 NI 列,需显式指定字段;而 ps -eo pid,nice,comm 才可靠。
真正麻烦的不是命令怎么敲,而是权限边界和调度效果的延迟感知——nice 只影响 CFS 调度器下的时间片权重,对 I/O 密集型或已阻塞的进程几乎无感;而且多个高 nice 值进程争抢 CPU 时,差异可能比预期小得多。










