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

42

Ich möchte die Windows-Prozesspriorität über die Befehlszeile ändern.

Wie kann ich das machen?

Bobs
quelle

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")
Bobs
quelle
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

Aschenbecher
quelle
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
Schlagring
quelle
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 .

Harrymc
quelle
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 .

Ed999
quelle