linux进程优先级由nice值控制,范围-20(最高)至+19(默认0),root可设任意值,普通用户仅能调高nice值;用nice启动新进程,renice动态调整运行中进程,需注意权限、cgroups限制及实时调度策略差异。

Linux中进程优先级通过nice值控制,范围是-20(最高)到+19(最低),默认为0。普通用户只能调高nice值(即降低优先级),而root可设任意值。实际调整用nice启动新进程,用renice修改运行中进程。
使用nice启动高/低优先级进程
启动命令前加nice -n N cmd,N为指定nice值。
- 让后台任务不抢资源:比如压缩大文件时降权,
nice -n 10 tar -cf archive.tar /data - 关键服务提权需root:如
sudo nice -n -5 ./critical_service(普通用户执行会报错) - 不带
-n也可简写:nice -10 sleep 100等价于nice -n -10 sleep 100
用renice动态调整正在运行的进程
renice支持按PID、用户或组修改。常用格式:renice -n N -p PID。
- 查PID再调整:先
ps aux | grep firefox找到PID,再sudo renice -n 5 -p 12345 - 批量调整个用户所有进程:
sudo renice -n 10 -u username - 按组调整:
sudo renice -n -2 -g devgroup(需对应GID存在) - 调整后可用
ps -o pid,ni,comm -p PID验证ni列是否更新
权限与限制注意事项
非root用户无法提升优先级(即不能设负nice值),也不能降低其他用户的进程优先级。
- 普通用户执行
nice -n -1 sleep 10会提示“Permission denied” - 想绕过限制?需配置
/etc/security/limits.conf,例如username soft priority 5 - 容器环境(如Docker)中,nice值受cgroups限制,即使root也可能被截断
- 实时调度策略(SCHED_FIFO/SCHED_RR)不受nice影响,需用
chrt单独设置
查看和判断进程优先级是否生效
用ps或top确认当前nice值,注意区分NI(nice)和PRI(内核计算的实际优先级)。
-
ps -eo pid,ni,pri,comm --sort=-ni | head -10:按nice降序看最“闲”的进程 -
top中按r键可交互式renice(需有权限) - PRI = 80 + NI(对普通SCHED_OTHER进程),所以nice=10 → PRI=90;但该公式仅作参考,实际受内核版本和调度器影响
- 若renice后无变化,检查进程是否已进入不可中断状态(D状态),此时无法响应调度调整










