nice命令用于以指定优先级启动新进程,n取值-20至19,值越小越抢占cpu,普通用户仅能设0–19,root才可设负值;它仅对新进程生效,且只影响cpu时间分配。

直接在命令前加 nice -n N 就能以指定优先级启动新进程。N 是 -20 到 19 之间的整数,值越小,进程越“抢资源”;值越大,越“谦让”。普通用户只能设 0–19,root 才能设负值。
理解 nice 值的含义和权限限制
nice 值不是“优先级数字”,而是调度器用来计算虚拟运行时间(vruntime)的偏移量。它影响 CFS 调度器分配 CPU 时间的比例,但不保证实时响应。
- -20 是最高优先级(最不谦让),19 是最低优先级(最谦让),默认为 0
- 普通用户只能调高 nice 值(比如设为 5、10、15),不能设负值——执行
nice -n -5 cmd会报Permission denied - 要设负值,必须用
sudo nice -n -10 cmd,但日常运维极少需要;除非是关键服务或调试场景 - 注意:
nice只对新启动的进程生效,对已运行的进程无效(得用renice)
常用启动方式与写法规范
推荐始终显式使用 -n 参数,避免歧义。以下写法等价,但带 -n 更清晰可靠:
-
nice -n 10 tar -cf backup.tar /data(后台备份时降低抢占性) -
nice -n 15 find /var/log -name "*.log" -exec grep "timeout" {} \;(避免日志扫描拖慢交互) -
nice -n 5 make -j8(编译时适度让出 CPU,兼顾速度与响应) - 不加
-n时,nice 5 cmd会被解释为nice -n 5 cmd,但部分 shell 或脚本环境可能行为不一致,建议统一写全
验证是否生效
启动后立刻查,别依赖 top 默认视图——它通常不显示 nice 值列:
- 查当前进程:
ps -o pid,comm,nice -p $(pgrep -f "your_command") - 查所有相关进程:
ps -eo pid,comm,nice --sort=-nice | head -10(按 nice 值倒序看最高/最低) - 在
top中按f→ 选中NI字段 → 按q返回,即可看到 NI 列 - 注意区分
NI(nice 值)和PR(priority):PR ≈ NI + 20(在 ps 输出中),真正起作用的是内核的 static_prio,用户无需换算
哪些情况容易失效或效果有限
nice 不是万能资源控制开关,它只作用于 CPU 时间片分配:
- IO 密集型任务(如大量读写磁盘、网络请求)受 nice 影响很小——它们大部分时间在等待,不争 CPU
- 容器内进程(Docker/Podman)常被 cgroup 的
cpu.shares或--cpus限制覆盖,宿主机上的 nice 设置可能被忽略 - systemd 启动的服务可能自带
Nice=配置,手动nice启动会被覆盖,应改 service 文件的[Service]段 - 空闲系统下,无论 nice 是 -20 还是 19,实际运行速度几乎没差别;只有在 CPU 紧张时才体现差异











