怎么用脚本设置程序优先级

wen 实用脚本 2

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

怎么用脚本设置程序优先级


📚 目录导读(Table of Contents)

  1. 为什么要用脚本设置优先级? —— 告别任务管理器的手动操作与限制
  2. 核心概念:什么是进程优先级? —— CPU、I/O、内存优先级的区别
  3. Windows 脚本实战:PowerShell 与 CMD 双方案
    • 1 设置CPU优先级(Idle, BelowNormal, High, Realtime)
    • 2 设置I/O优先级(关键帧避免卡顿)
    • 3 一键启动游戏/软件并自动设置(带参数式)
  4. Linux / macOS 脚本实战:nice, renice 与 ionice
    • 1 启动时指定优先级(nice)
    • 2 运行时调整已运行进程(renice + ionice)
  5. 脚本进阶:结合任务计划程序实现每次开机自动优化
  6. 常见问题解疑(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.dllSetPriorityClass并设置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或者使用systemdnice覆盖。


常见问题解疑(FAQ)

问:为什么我把游戏设置为Realtime(实时)反而电脑卡死了? 答:Realtime优先级最高,会让系统核心进程(如鼠标驱动、网络管理)无法获得CPU时间片,导致鼠标延迟、音频爆音甚至死机。建议游戏最高设置“高(High)”即可,I/O优先级才设置“Critical”。

问:我的脚本提示“拒绝访问”或“权限不足”,怎么办? 答:修改优先级需要管理员权限,右键“以管理员身份运行”你的CMD或PowerShell,对于Linux修改负nice值(提高优先级),必须使用sudo,部分游戏有反作弊保护(如EAC),会拒绝外部修改优先级,需要手动在任务管理器中操作一次才能解锁。

问:脚本设置后,重启软件会失效吗? 答:是的,重新启动进程后优先级会重置为“正常(Normal)”,所以你的脚本需要“先启动程序,等待2秒,再设置优先级”这种顺序逻辑,或者直接使用任务计划程序绑定到进程启动事件。

问:Mac系统有没有类似的脚本命令? 答:有,macOS继承了Unix特性,使用renice即可,但I/O优先级设置(ionice)在macOS上不可用,需要使用第三方工具如purgenice


通过脚本设置程序优先级,是提升电脑执行效率、防止资源被后台工具霸占的隐藏大招,无论是Windows的PowerShell还是Linux的Shell,掌握这几个核心命令后,你就可以把“手动调节”变成“全自动智能管理”,记住两个铁律:不要轻易使用Realtime,管理员权限是前提,现在就复制上面的代码,去优化你的工作环境吧。

抱歉,评论功能暂时关闭!