ionice是Linux中用于设置或查询进程I/O调度类和优先级的标准命令,支持Idle、Best-effort、Realtime三类策略,通过-c指定类别、-n设优先级(0–7)、-p操作运行中进程。

ioprio-p -p PID 不是标准 Linux 命令,不存在 ioprio-p 这个可执行程序。你可能混淆了命令名——实际用于动态调整运行中进程 I/O 优先级的工具是 ionice,其正确语法为:
ionice -c CLASS -n LEVEL -p PID
其中 -p PID 才是用于指定已有进程的关键选项。
✅ 正确做法:用 ionice -p 动态修改运行中进程的磁盘 I/O 优先级
1. 查看当前进程的 I/O 调度策略
ionice -p <PID>
例如:
ionice -p 1234 # 输出示例:io priority = 2:6 (表示 Class 2,Nice Level 6)
2. 修改为“空闲级”(最低干扰,仅系统空闲时执行 I/O)
ionice -c3 -p 1234
- 适合
rsync、tar、日志归档等后台任务; - 普通用户可用(无需 root)。
3. 修改为 Best-effort 类别 + 低优先级(如 6 或 7)
ionice -c2 -n7 -p 1234
-
-c2是默认类别(绝大多数用户进程归属此类); -
-n7是该类别中最低的 I/O 优先级(0 最高,7 最低); - 普通用户可设
n=0–7;root 可设n=0–7(Class 2)或启用 Class 1。
4. 修改为 Realtime(最高 I/O 优先级,需 root 权限)
sudo ionice -c1 -n0 -p 1234
- ⚠️ 极少需要,滥用会导致其他进程(如 SSH、syslog)I/O 饥饿、响应卡顿;
- 普通用户无权使用,会报错
Permission denied。
? 补充说明:为什么不能用 ioprio-p?
- Linux 内核提供的是
ioprio_get()/ioprio_set()系统调用; - 用户空间唯一标准封装工具是
ionice(来自util-linux包); -
ioprio-p并非任何主流发行版(Ubuntu/CentOS/RHEL/Fedora/Debian)中的合法命令; - 可能是误记、拼写错误,或混淆了
ionice -p的-p参数(意为 pid,不是命令名一部分)。
验证是否存在该命令:
command -v ioprio-p # 通常返回空 which ioprio-p # 同样无输出
? 实用技巧:配合 nice 降低整体资源争抢
若进程既占 CPU 又猛刷磁盘(如 find / -name "*.log" | xargs grep ...),建议组合降载:
# 先查 PID,再双管齐下 PID=$(pgrep -f "grep.*log") sudo renice 19 -p $PID # 降低 CPU 时间片权重 sudo ionice -c3 -p $PID # 降低磁盘 I/O 调度权重
注意:
renice 19和ionice -c3都是“让出资源”的温和方式,对系统友好,适合运维维护、备份、批量处理等场景。
不复杂但容易忽略:ionice -p 必须作用于已存在且仍在运行的进程;如果进程已退出,会提示 No such process。


















