通过命令行更改Windows进程优先级


Answers:


55

命令行语法:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

例:

wmic process where name="calc.exe" CALL setpriority 32768

要么

wmic process where name="calc.exe" CALL setpriority "above normal"

优先:

  • 空闲:64(或“空闲”)
  • 低于正常水平:16384(或“低于正常水平”)
  • 正常:32(或“正常”)
  • 高于正常水平:32768(或“高于正常水平”)
  • 高优先级:128(或“高优先级”)
  • 实时:256(或“实时”)

7
您也可以做通配符 wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex 2014年

是否有可能像Process Explorer中那样对Background(低IO和内存优先级)做同样的事情?
miky

甚至可以批量处理“ cmd.exe”吗?...将启动该cmd.exe的批处理?
gamer0

注意:第一组引号是强制性的,因此在其他shell中,引号必须转义(或双引号)。在Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo

2
为什么低于/高于正常值这么大又奇怪?为何正常值比空闲时间和实时时间都少?
phuclv

11

一个小的补充。

您也可以像这样使用字符串值而不是整数(更易于记忆):

 wmic process where name="calc.exe" CALL setpriority "idle"

可能的值:“空闲”,“低”,“低于正常”,“正常”,“高于正常”,“高优先级”,“实时”

PS。不要忘记引号,尤其是在字符串值中使用多个单词的情况下


第一组引号是强制性的,即使不使用多个单词也是如此。还必须将其传递给命令,而不是由Shell解释。
piojo

在win10 Pro 1809上,“低”不是一个可识别的值-它会引发错误。使用“空闲”会导致该进程在任务管理器中显示为“低”优先级...
ljwobker 18/12/3

5

从批处理命令行中,我将仅使用PowerShell。此示例启动calc.exe,找到其进程,并将其优先级调整为“ IDLE”,也就是LOW:

start /b /wait powershell.exe -command "calc.exe;$prog = Get-Process -Name calc;$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE"

指定以下枚举值之一:“ Normal, Idle, High, RealTime, BelowNormal, AboveNormal

这是PowerShell中带有分割线的同一件事:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE

重复之前已经说过的话有什么意义?
harrymc

@harrymc它使用PowerShell回答了原始问题。
paradroid 2014年

@harrymc-实际上,我在重复DEC的发言。 stackoverflow.com/questions/20693028/...
肘牵引

没问题。只是我链接到类似的东西。
harrymc

5

除了现有的答案外,“ 等效于Windows”的问题还 列出了其他一些解决方案:

  1. 在命令提示符(CMD)中使用命令START
  2. 使用免费的ProcessTamer在.exe上设置规则,该规则在启动该进程时自动执行。
  3. 使用此处包含的PowerShell脚本。
  4. 使用此处包含的VBScript脚本。

另外,旧的SetPriority实用程序可能仍然可以使用,但是我已经很多年没有尝试过了。

其中一些解决方案可能无法在系统服务上运行,或者可能需要以管理员身份运行


vbScript解决方案的明显缺点是,它需要23行代码来完成其任务(即,设置优先级),而START命令仅需执行2行(紧要关头,因此它甚至可以在裸命令提示符):启动“” / realtime / b / w program.exe
Ed999

1

我正在运行Windows 7 64位。

WMIC命令是可靠的。以我的丰富经验,它由于太多(大多数是无法解释的)原因而意外失败。

由于其可靠性,最好的命令是START命令。语法非常简单(这是批处理文件的3行运行命令):

::  Boost thread priority
SET command=<program.exe> <options>
start "" /REALTIME /B /W  %command%

在我看来,它的高度可靠性源于以下事实:它设置了启动.exe程序的优先级,而不是在程序开始以其他优先级运行不尝试干预优先级。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.