Modifica della priorità del processo di Windows tramite riga di comando


Risposte:


55

La sintassi della riga di comando:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Esempio:

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

o

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

Priorità:

  • inattivo: 64 (o "inattivo")
  • al di sotto del normale: 16384 (o "al di sotto del normale")
  • normale: 32 (o "normale")
  • sopra il normale: 32768 (o "sopra il normale")
  • alta priorità: 128 (o "alta priorità")
  • tempo reale: 256 (o "tempo reale")

7
Puoi anche fare jolly wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex il

È possibile fare lo stesso per Background (bassa IO e priorità di memoria) come in Process Explorer?
miky

funzionerà anche su "cmd.exe" dal batch? ... batch che avvierà quel cmd.exe?
gamer0

Nota: la prima serie di virgolette è obbligatoria, quindi in altre shell le virgolette devono essere salvate (o tra virgolette doppie). In Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo,

2
perché il valore inferiore / superiore al normale è così grande e strano? E perché è normale sia inattivo che in tempo reale?
phuclv,

11

Una piccola aggiunta.

Puoi anche usare valori stringa invece di numeri interi (più facili da memorizzare) in questo modo:

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

Valori possibili: "inattivo", "basso", "sotto normale", "normale", "sopra normale", "alta priorità", "tempo reale"

PS. Non dimenticare le virgolette, soprattutto se si utilizzano più parole in un valore di stringa


La prima serie di virgolette è obbligatoria, anche se non si usano più parole. Deve anche essere passato al comando, piuttosto che essere interpretato dalla shell.
Piojo,

Su win10 Pro 1809, "basso" non è un valore riconosciuto: genera un errore. l'uso di "Idle" fa sì che il processo venga visualizzato come priorità "bassa" in Task Manager ...
ljwobker,

5

Dalla riga di comando batch utilizzerei semplicemente PowerShell. Questo esempio avvia calc.exe, trova il suo processo e regola la sua classe di priorità su "IDLE", ovvero LOW:

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

Specificare uno dei seguenti valori di enumerazione: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Ecco la stessa cosa di PowerShell con linee di divisione:

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

A che serve ripetere ciò che è già stato detto prima?
harrymc,

@harrymc Risponde alla domanda originale, usando PowerShell.
paradroid,

@harrymc - in realtà sto ripetendo quello che ho detto da DEC. stackoverflow.com/questions/20693028/…
Knuckle-Dragger

Nessun problema. Solo che ho collegato a qualcosa di abbastanza simile.
harrymc,

5

Oltre alle risposte esistenti, la domanda equivalente a Windows di "bello" elenca alcune altre soluzioni:

  1. Utilizzando il comando START nel prompt dei comandi (CMD).
  2. Utilizzo di ProcessTamer gratuito per impostare una regola su .exe che viene automaticamente applicata ogni volta che viene avviato quel processo.
  3. Utilizzando uno script PowerShell contenuto qui .
  4. Utilizzando uno script VBScript contenuto qui .

Inoltre, la vecchia utility SetPriority potrebbe ancora funzionare, ma non ci provo da molti anni.

Alcune di queste soluzioni potrebbero non funzionare sui servizi di sistema o potrebbe essere necessario eseguirle come amministratore .


L'ovvio problema con la soluzione vbScript è che sono necessarie 23 righe di codice per eseguire il suo compito (ovvero impostare il livello di priorità), dove il comando START richiede solo 2 righe per farlo (una, a un pizzico, quindi funziona anche a un prompt dei comandi nudo): avvia "" / realtime / b / w program.exe
Ed999

1

Sto eseguendo Windows 7 a 64 bit.

Il comando wmic non è affidabile. Nella mia considerevole esperienza, fallisce inaspettatamente per troppi motivi (per lo più inspiegabili).

Il miglior comando possibile, per la sua affidabilità, è il comando START. La sintassi è molto semplice (questo è il comando di esecuzione a 3 righe per un file batch ):

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

A mio avviso, il suo alto grado di affidabilità deriva dal fatto che imposta il livello di priorità con cui viene avviato il programma .exe, piuttosto che cercare di immischiarlo con priorità dopo che il programma ha iniziato a funzionare con una priorità diversa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.