Ändern der Windows-Prozesspriorität über die Befehlszeile


Antworten:


55

Die Befehlszeilensyntax:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Beispiel:

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

oder

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

Priorität:

  • Leerlauf: 64 (oder "Leerlauf")
  • unterdurchschnittlich: 16384 (oder "unterdurchschnittlich")
  • normal: 32 (oder "normal")
  • überdurchschnittlich: 32768 (oder "überdurchschnittlich")
  • hohe Priorität: 128 (oder "hohe Priorität")
  • Echtzeit: 256 (oder "Echtzeit")

7
Sie können auch Wildcards verwenden wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex

Ist es möglich, dasselbe für den Hintergrund (niedrige E / A- und Speicherpriorität) wie im Process Explorer zu tun?
Miky

Funktioniert das auch mit "cmd.exe" ab Batch? ... Batch, der die cmd.exe startet?
Spieler0

Hinweis: Der erste Satz von Anführungszeichen ist obligatorisch, daher müssen die Anführungszeichen in anderen Shells maskiert (oder in doppelten Anführungszeichen angegeben) werden. In Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
Piojo

2
Warum ist der Normalwert unter / über so groß und seltsam? Und warum ist normal weniger als sowohl im Leerlauf als auch in Echtzeit?
Phuclv

11

Eine kleine Ergänzung.

Sie können auch Zeichenfolgenwerte anstelle von Ganzzahlen verwenden (einfacher zu merken):

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

Mögliche Werte: "Leerlauf", "Niedrig", "Unter Normal", "Normal", "Über Normal", "Hohe Priorität", "Echtzeit"

PS. Vergessen Sie die Anführungszeichen nicht, insbesondere wenn Sie mehrere Wörter in einem Zeichenfolgenwert verwenden


Der erste Satz von Anführungszeichen ist obligatorisch, auch wenn nicht mehrere Wörter verwendet werden. Es muss auch an den Befehl übergeben werden, anstatt von der Shell interpretiert zu werden.
Piojo

Auf win10 Pro 1809 ist "low" kein erkannter Wert - es wird ein Fehler ausgegeben. Bei Verwendung von "Leerlauf" wird der Prozess im Task-Manager als "niedrige" Priorität angezeigt ...
ljwobker

5

Über die Batch-Befehlszeile würde ich einfach PowerShell verwenden. In diesem Beispiel wird calc.exe gestartet, der Prozess gefunden und die Prioritätsklasse auf "IDLE" (auch bekannt als LOW) eingestellt:

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

Geben Sie einen der folgenden Aufzählungswerte an: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Hier ist dasselbe von PowerShell mit geteilten Linien:

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

Wozu wiederholen, was schon gesagt wurde?
Harrymc

@harrymc Beantwortet die ursprüngliche Frage mit PowerShell.
Paradroid

@harrymc - eigentlich wiederhole ich, was ich von DEC gesagt habe. stackoverflow.com/questions/20693028/…
Knuckle-Dragger

Kein Problem. Nur, dass ich etwas ziemlich Ähnliches verlinkt habe.
Harrymc

5

Zusätzlich zu den vorhandenen Antworten werden in der Frage Windows Equivalent of 'nice' einige weitere Lösungen aufgeführt:

  1. Verwenden Sie den Befehl START in der Eingabeaufforderung (CMD).
  2. Richten Sie mit dem kostenlosen ProcessTamer eine Regel für die EXE- Datei ein , die beim Starten dieses Prozesses automatisch erzwungen wird.
  3. Verwenden eines hier enthaltenen PowerShell-Skripts .
  4. Verwendung eines hier enthaltenen VBScript-Skripts .

Außerdem funktioniert das alte SetPriority- Dienstprogramm möglicherweise noch, aber ich habe es seit vielen Jahren nicht mehr ausprobiert.

Einige dieser Lösungen funktionieren möglicherweise nicht auf Systemdiensten oder müssen möglicherweise als Administrator ausgeführt werden .


Der offensichtliche Haken bei der vbScript-Lösung ist, dass es 23 Codezeilen dauert, um seine Aufgabe zu erfüllen (dh die Prioritätsstufe festzulegen), wobei der START-Befehl nur 2 Zeilen benötigt, um dies zu tun (eine zur Not, daher funktioniert er sogar bei eine
leere

1

Ich verwende Windows 7 64-Bit.

Der Befehl wmic ist nicht zuverlässig. Nach meiner Erfahrung scheitert es unerwartet aus zu vielen (meist unerklärlichen) Gründen.

Der aufgrund seiner Zuverlässigkeit bestmögliche Befehl ist der Befehl START. Die Syntax ist sehr einfach (dies ist der dreizeilige Ausführungsbefehl für eine Batchdatei ):

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

Meiner Meinung nach beruht das hohe Maß an Zuverlässigkeit darauf, dass die Prioritätsstufe festgelegt wird, mit der das EXE-Programm gestartet wird, anstatt zu versuchen, sich vorrangig einzumischen, nachdem das Programm mit einer anderen Priorität gestartet wurde .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.