Zmiana priorytetu procesu Windows za pomocą wiersza polecenia

Odpowiedzi:

55

Składnia wiersza poleceń:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Przykład:

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

lub

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

Priorytet:

  • bezczynność: 64 (lub „bezczynność”)
  • poniżej normy: 16384 (lub „poniżej normy”)
  • normalny: 32 (lub „normalny”)
  • powyżej normy: 32768 (lub „powyżej normy”)
  • wysoki priorytet: 128 (lub „wysoki priorytet”)
  • w czasie rzeczywistym: 256 (lub „w czasie rzeczywistym”)
Boby
źródło
7
Możesz także wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
używać
Czy można zrobić to samo dla Tła (niski priorytet We / Wy i pamięci) jak w Process Explorer?
miky
czy to zadziała nawet na wsadowym pliku „cmd.exe”? ... partia, która uruchomi ten cmd.exe?
gamer0
Uwaga: pierwszy zestaw cytatów jest obowiązkowy, więc w innych powłokach cudzysłowy muszą być poprzedzane znakami ucieczki (lub cudzysłowami podwójnymi). W Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo
2
dlaczego wartość poniżej / powyżej wartości normalnej jest tak duża i dziwna? A dlaczego normalna jest mniejsza niż bezczynność i czas rzeczywisty?
phuclv
11

Mały dodatek.

Możesz również użyć wartości ciągu zamiast liczb całkowitych (łatwiejsze do zapamiętania) w następujący sposób:

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

Możliwe wartości: „bezczynny”, „niski”, „poniżej normalnego”, „normalny”, „powyżej normalnego”, „wysoki priorytet”, „w czasie rzeczywistym”

PS. Nie zapomnij o cudzysłowach, zwłaszcza jeśli używasz wielu słów w wartości ciągu

Popielniczka
źródło
Pierwszy zestaw cytatów jest obowiązkowy, nawet jeśli nie używa wielu słów. Musi być również przekazany do polecenia, a nie interpretowany przez powłokę.
piojo,
W win10 Pro 1809 „niski” nie jest rozpoznawaną wartością - generuje błąd. użycie „Bezczynności” powoduje wyświetlenie procesu jako „niski” priorytet w menedżerze zadań ...
ljwobker
5

Z wiersza polecenia wsadowego po prostu używałbym PowerShell. Ten przykład uruchamia calc.exe, znajduje swój proces i dostosowuje klasę priorytetu do „IDLE”, czyli LOW:

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

Podaj jedną z następujących wartości wyliczenia: „ Normal, Idle, High, RealTime, BelowNormal, AboveNormal

Oto to samo z PowerShell z liniami podziału:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE
Knuckle-Dragger
źródło
Po co powtarzać to, co już powiedziano wcześniej?
harrymc
@harrymc Odpowiada na oryginalne pytanie, używając PowerShell.
paradroid
@harrymc - w rzeczywistości powtarzam to, co powiedziałem z DEC. stackoverflow.com/questions/20693028/…
Knuckle-Dragger
Nie ma problemu. Po prostu powiązałem z czymś podobnym.
harrymc
5

Oprócz istniejących odpowiedzi na pytanie „ Ekwiwalent” systemu Windows znajduje się kilka innych rozwiązań:

  1. Korzystanie z polecenia START w wierszu polecenia (CMD).
  2. Korzystanie z bezpłatnego ProcessTamer do skonfigurowania reguły w pliku .exe, która jest automatycznie wymuszana przy każdym uruchomieniu tego procesu.
  3. Za pomocą skryptu PowerShell zawartego tutaj .
  4. Za pomocą skryptu VBScript zawartego tutaj .

Ponadto stare narzędzie SetPriority może nadal działać, ale nie próbowałem tego od wielu lat.

Niektóre z tych rozwiązań mogą nie działać w usługach systemowych lub mogą wymagać uruchomienia jako administrator .

harrymc
źródło
Oczywistą przeszkodą w rozwiązaniu vbScript jest to, że wykonanie 23 zadania wymaga 23 linii kodu (tj. Ustawienie poziomu priorytetu), przy czym polecenie START zajmuje tylko 2 linie (jeden, w skrócie, dlatego działa nawet w goły
wiersz
1

Korzystam z systemu Windows 7 64-bit.

Komenda wmic nie jest niezawodna. Z mojego doświadczenia wynika, że ​​nieoczekiwanie zawodzi z zbyt wielu (głównie niewytłumaczalnych) powodów.

Najlepszym możliwym poleceniem, ze względu na jego niezawodność, jest polecenie START. Składnia jest bardzo prosta (jest to 3-liniowa komenda uruchomienia dla pliku wsadowego ):

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

Moim zdaniem jego wysoki stopień niezawodności wynika z faktu, że ustala poziom priorytetu, z którym uruchamiany jest program .exe, zamiast próbować wtrącać się w priorytety po uruchomieniu programu z innym priorytetem.

Ed999
źródło