** 别再手动拖拽了!一文教你用脚本精准设置程序优先级(CPU/IO/网络),附Windows与Linux实战代码

📚 目录导读(Table of Contents)
- 为什么要用脚本设置优先级? —— 告别任务管理器的手动操作与限制
- 核心概念:什么是进程优先级? —— CPU、I/O、内存优先级的区别
- Windows 脚本实战:PowerShell 与 CMD 双方案
- 1 设置CPU优先级(Idle, BelowNormal, High, Realtime)
- 2 设置I/O优先级(关键帧避免卡顿)
- 3 一键启动游戏/软件并自动设置(带参数式)
- Linux / macOS 脚本实战:nice, renice 与 ionice
- 1 启动时指定优先级(nice)
- 2 运行时调整已运行进程(renice + ionice)
- 脚本进阶:结合任务计划程序实现每次开机自动优化
- 常见问题解疑(FAQ) —— 为什么设置了Realtime反而更卡?脚本权限不够怎么办?
为什么要用脚本设置优先级?
很多玩家或运维人员都知道,在Windows任务管理器里右键进程→“设置优先级”可以解决卡顿,但这个方法有两个致命缺点:不可重复性(每次重启软件都要手动设置)和粒度太粗(无法同时设置I/O和网络优先级),而通过脚本,我们可以在双击启动游戏的同时,自动将游戏进程的CPU优先级调至“高”、将后台下载工具的I/O优先级调至“低”,实现全自动智能调度,在服务器运维中,脚本设置优先级更是保证核心数据库响应速度的必备技能。
核心概念:什么是进程优先级?
在Windows中,优先级分为进程优先级(Process Priority) 和线程优先级(Thread Priority),我们脚本中常用的是进程优先级,范围从IDLE(空闲,值64)到REALTIME(实时,值256)。
- CPU优先级:决定该进程能分配到多少CPU时间片。
- I/O优先级:在Windows 7以上系统中尤为重要,控制磁盘读取的权重,
Critical(关键)可防止视频录制时掉帧。 - 内存优先级:影响内存页面置换的权重,很少直接设置。
在Linux中,优先级通过Nice值(-20到19)和实时调度策略(SCHED_FIFO)控制,数值越低,优先级越高。
Windows 脚本实战:PowerShell 与 CMD 双方案
1 设置CPU优先级(PowerShell 核心命令)
我们不需要安装第三方工具,使用内置的WMI即可,创建一个Set-Priority.ps1脚本:
# 定义参数:进程名或PID
param(
[string]$ProcessName,
[int]$PriorityValue = 1 # 1=Idle, 2=BelowNormal, 3=Normal, 4=High, 5=Realtime
)
$Process = Get-Process -Name $ProcessName -ErrorAction Stop
$Process.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::High
Write-Host "已将 $ProcessName 的优先级设置为 High"
命令行版(CMD / Bat) 更简洁,利用wmic命令:
@echo off wmic process where "name='game.exe'" CALL setpriority 128
注意:
wmic中的优先级数值为十六进制(128=Normal, 256=High, 64=Idle, 32768=Realtime),Realtime可能导致系统键鼠卡死,强烈不建议在非实时控制系统使用。
2 设置I/O优先级(防止后台工具抢盘)
I/O优先级不能用PriorityClass直接设置,需要用PowerShell调用NtSetInformationProcess 这个API,或者使用系统自带的cmd工具start命令配合/IO参数:
start "MyGame" /IO HIGH "C:\Games\game.exe"
如果你需要设置已运行的进程,必须借助一小段PowerShell脚本(核心是调用kernel32.dll的SetPriorityClass并设置IoPriority),这里提供一个精简版,需要管理员权限运行:
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
public class IoPriority {
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(uint access, bool inherit, int pid);
[DllImport("kernel32.dll")]
public static extern bool SetPriorityClass(IntPtr handle, uint priorityClass);
}
'@
# 打开进程并设置IO_PRIORITY_LOW (0x40000000)
$h = [IoPriority]::OpenProcess(0x1F0FFF, $false, 1234) # 1234替换为你的PID
[IoPriority]::SetPriorityClass($h, 0x40000001)
3 一键启动并设置(带参数式)
把脚本写成组合拳,既启动又改优先级,且自动获取PID:
@echo off start "先启动" "D:\Software\obs-studio\bin\64bit\obs64.exe" timeout /t 3 /nobreak >nul wmic process where "name='obs64.exe'" CALL setpriority 128 wmic process where "name='obs64.exe'" CALL setpriority 0x40000000 REM 设置I/O为高 echo OBS已优先分配CPU与磁盘资源
Linux / macOS 脚本实战:nice 与 ionice
1 启动时指定优先级(nice)
Linux的nice命令语法非常直观:
# 使用低优先级(nice值10)启动下载任务 nice -n 10 ./download.sh # 使用高优先级(nice值-5,需要root) sudo nice -n -5 ./game_server
2 运行时调整已运行进程(renice + ionice)
如果软件已经运行,使用PID调整:
# 将PID为1234的进程优先级调低(nice值15,限制其抢CPU)
renice 15 -p 1234
# 设置I/O调度:空闲类(idle),仅当磁盘空闲时运行
ionice -c 3 -p 1234
# 综合:一键脚本,自动找进程PID
#!/bin/bash
pgrep -f "chrome" | while read -r pid; do
renice 10 -p $pid
ionice -c3 -p $pid
done
echo "已将Chrome所有进程降级"
小技巧:在Ubuntu上,
systemd-run也可以直接指定CPUQuota和Nice值启动服务。
脚本进阶:结合任务计划程序实现开机自动优化
在Windows中,你不需要手动运行脚本,通过一个VBS脚本将PowerShell设为隐藏运行,然后注册到计划任务:
CreateObject("Wscript.Shell").Run "powershell -ExecutionPolicy Bypass -File C:\Scripts\SetHigh.ps1", 0, False
然后在任务计划程序中,触发器设为“登录时”,操作设为运行上面的VBS,即可实现开机无感自动化,Linux用户则可以把命令写入/etc/rc.local或者使用systemd的nice覆盖。
常见问题解疑(FAQ)
问:为什么我把游戏设置为Realtime(实时)反而电脑卡死了? 答:Realtime优先级最高,会让系统核心进程(如鼠标驱动、网络管理)无法获得CPU时间片,导致鼠标延迟、音频爆音甚至死机。建议游戏最高设置“高(High)”即可,I/O优先级才设置“Critical”。
问:我的脚本提示“拒绝访问”或“权限不足”,怎么办?
答:修改优先级需要管理员权限,右键“以管理员身份运行”你的CMD或PowerShell,对于Linux修改负nice值(提高优先级),必须使用sudo,部分游戏有反作弊保护(如EAC),会拒绝外部修改优先级,需要手动在任务管理器中操作一次才能解锁。
问:脚本设置后,重启软件会失效吗? 答:是的,重新启动进程后优先级会重置为“正常(Normal)”,所以你的脚本需要“先启动程序,等待2秒,再设置优先级”这种顺序逻辑,或者直接使用任务计划程序绑定到进程启动事件。
问:Mac系统有没有类似的脚本命令?
答:有,macOS继承了Unix特性,使用renice即可,但I/O优先级设置(ionice)在macOS上不可用,需要使用第三方工具如purge或nice。
通过脚本设置程序优先级,是提升电脑执行效率、防止资源被后台工具霸占的隐藏大招,无论是Windows的PowerShell还是Linux的Shell,掌握这几个核心命令后,你就可以把“手动调节”变成“全自动智能管理”,记住两个铁律:不要轻易使用Realtime,管理员权限是前提,现在就复制上面的代码,去优化你的工作环境吧。