nice值仅影响CPU调度,不能修改运行中进程的优先级,须用renice;普通用户只能设0–19,负值需sudo;设置后继承子进程,但对I/O等无作用。

nice 值设得不对,进程该抢资源时没抢到、该让路时又卡着不动——这不是调度器坏了,是值填错了。
启动新进程时用 nice -n N 指定优先级
nice只在命令启动瞬间生效,之后无法修改。它不是“设置进程”,而是“以指定谦让度启动一个新进程”。
- 普通用户只能用
nice -n 0到nice -n 19(即只能降低优先级,不能加权) - 想设
nice -n -5?必须加sudo,否则报错:setpriority: Permission denied - 不写
-n也能用,比如nice -10 command,但易混淆:这是把-10当作参数传给 command 还是当作 nice 值?强烈建议统一用-n显式声明 -
nice设置的值会继承给所有子进程。比如nice -n 15 bash启动的 shell,再在里面跑python script.py,python 进程的 nice 值也是 15
运行中进程改优先级必须用 renice
nice 对已运行进程完全无效。想调正在跑的 rsync 或 ffmpeg,只能靠 renice。
- 先查 PID:
ps aux | grep ffmpeg→ 找到 PID,比如12345 - 再调整:
renice 12 12345(注意:不加-n也行,但加了更清晰:renice -n 12 -p 12345) - 普通用户只能对自己启动的进程调高 nice 值(即让出更多 CPU),不能设负值,也不能动别人或系统服务的进程
- 批量调一个用户的全部进程:
sudo renice 8 -u www-data - 调整后立即生效,但不会改变进程当前所处的调度队列位置——只是下次调度时权重变
top 和 ps 看不到 nice 值?默认不显示
很多人调完 nice 或 renice,打开 top 却找不到 NI 列,以为没生效。
-
top默认隐藏NI列。按f进入字段管理 → 方向键选中NI→ 按空格启用 → 按q退出 - 更可靠的方式是直接查:
ps -o pid,comm,nice -p 12345,输出里第三列就是当前 nice 值 - 注意:systemd 服务可能自带
Nice=配置,手动renice后若服务重启,会恢复配置值;要永久生效得改.service文件里的[Service]段
真正容易被忽略的是:nice 值只影响 CPU 时间片分配,对磁盘 I/O、内存分配、网络带宽毫无作用。如果你的进程卡在读大文件或等数据库响应,调再低的 nice 值也救不了它——那得看 ionice 或 cgroups。











