Зміна пріоритету Windows в командному рядку


Відповіді:


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

Можна зробити те ж саме для Background (низький пріоритет IO та пам'яті), як у Process Explorer?
miky

це буде працювати навіть на "cmd.exe" з партії? ... пакет, який запустить цей cmd.exe?
gamer0

Примітка: перший набір лапок є обов'язковим, тому в інших оболонках цитати повинні бути відхилені (або подвійні). У Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo

2
чому нижче / вище нормального значення настільки велике і дивне? І чому в нормі менше, ніж як в режимі простою, так і в режимі реального часу?
phuclv

11

Невелике доповнення.

Ви також можете використовувати рядкові значення замість цілих чисел (простіше запам’ятовувати) так:

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

Можливі значення: "в режимі очікування", "низький", "нижче норми", "нормальний", "вище норми", "високий пріоритет", "в реальному часі"

PS. Не забувайте лапки, особливо якщо в рядковому значенні використовується кілька слів


Перший набір лапок є обов'язковим, навіть якщо не використовується декілька слів. Він також повинен бути переданий команді, а не інтерпретуватися оболонкою.
piojo

У win10 Pro 1809 "низький" не є визнаним значенням - він видає помилку. використання "простою" призводить до того, що процес відображатиметься як "низький" пріоритет у менеджері завдань ...
ljwobker

5

З командного рядка batch я просто використовую 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.
парадороїд

@harrymc - насправді я повторюю те, що сказав від DEC. stackoverflow.com/questions/20693028 / ...
кулака Dragger

Без проблем. Просто це я пов’язав із чимось досить схожим.
harrymc

5

Окрім існуючих відповідей, питання Windows еквівалент 'nice' перелічує ще кілька варіантів вирішення:

  1. Використання команди START у командному рядку (CMD).
  2. Використання безкоштовного ProcessTamer для встановлення правила на .exe, яке автоматично виконується при кожному запуску цього процесу.
  3. Використання сценарію PowerShell , що міститься тут .
  4. Використання скрипта VBScript, що міститься тут .

Крім того, стара утиліта SetPriority все ще може працювати, але я не пробував її вже багато років.

Деякі з цих рішень можуть не працювати в системних сервісах або, можливо, їх потрібно запустити як адміністратор .


Очевидний забій з рішенням vbScript полягає в тому, що для виконання своєї задачі потрібно 23 рядки коду (тобто встановити рівень пріоритету), де команда START займає лише 2 рядки для цього (один, прищіпку, отже, він навіть працює на голий командний рядок): start "" / 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, а не намагається втрутитися в пріоритет після того, як програма почала працювати з іншим пріоритетом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.