Cambiar la prioridad del proceso de Windows a través de la línea de comando

Respuestas:

55

La sintaxis de la línea de comando:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Ejemplo:

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

o

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

Prioridad:

  • inactivo: 64 (o "inactivo")
  • debajo de lo normal: 16384 (o "debajo de lo normal")
  • normal: 32 (o "normal")
  • por encima de lo normal: 32768 (o "por encima de lo normal")
  • alta prioridad: 128 (o "alta prioridad")
  • tiempo real: 256 (o "tiempo real")
Bobs
fuente
77
También puede hacer comodines wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex
¿Es posible hacer lo mismo para el fondo (baja E / S y prioridad de memoria) como en Process Explorer?
miky
¿funcionará esto incluso en "cmd.exe" del lote? ... lote que iniciará ese cmd.exe?
gamer0
Nota: el primer conjunto de comillas es obligatorio, por lo tanto, en otros shells, las comillas deben escaparse (o comillas dobles). En Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo
2
¿Por qué el valor inferior o superior al normal es tan grande y extraño? ¿Y por qué es normal menos que inactivo y en tiempo real?
phuclv
11

Una pequeña adición.

También puede usar valores de cadena en lugar de enteros (más fáciles de memorizar) así:

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

Valores posibles: "inactivo", "bajo", "por debajo de lo normal", "normal", "por encima de lo normal", "alta prioridad", "en tiempo real"

PD. No olvide las comillas, especialmente si usa varias palabras en un valor de cadena

Cenicero
fuente
El primer conjunto de citas es obligatorio, incluso si no se usan varias palabras. También debe pasarse al comando, en lugar de ser interpretado por el shell.
piojo
En win10 Pro 1809, "bajo" no es un valor reconocido, arroja un error. el uso de "inactivo" hace que el proceso que se muestra como prioridad "baja" en el administrador de tareas ...
ljwobker
5

Desde la línea de comandos por lotes, simplemente usaría PowerShell. Este ejemplo inicia calc.exe, encuentra su proceso y ajusta su clase de prioridad a "IDLE", también conocido como BAJO:

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

Especifique uno de los siguientes valores de enumeración: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Aquí está lo mismo de PowerShell con líneas divididas:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE
Knuckle-Dragger
fuente
¿Cuál es el punto de repetir lo que ya se dijo antes?
harrymc
@harrymc Responde la pregunta original, usando PowerShell.
paradroid
@harrymc: en realidad estoy repitiendo lo que dije desde DEC. stackoverflow.com/questions/20693028/…
Knuckle-Dragger
No hay problema. Solo que me vinculé a algo bastante similar.
harrymc
5

Además de las respuestas existentes, la pregunta Equivalente de Windows de 'agradable' enumera algunas soluciones más:

  1. Usando el comando START en el símbolo del sistema (CMD).
  2. Usar el ProcessTamer gratuito para configurar una regla en el .exe que se aplica automáticamente cada vez que se inicia ese proceso.
  3. Usando un script de PowerShell contenido aquí .
  4. Usando un script VBScript contenido aquí .

Además, la antigua utilidad SetPriority aún podría funcionar, pero no la he probado en muchos años.

Es posible que algunas de estas soluciones no funcionen en los servicios del sistema o que necesiten ejecutarse como administrador .

harrymc
fuente
El inconveniente obvio con la solución vbScript es que se necesitan 23 líneas de código para llevar a cabo su tarea (es decir, establecer el nivel de prioridad), donde el comando START solo toma 2 líneas para hacerlo (una, en un aprieto, por lo tanto, incluso funciona en un símbolo del sistema
simple
1

Estoy ejecutando Windows 7 de 64 bits.

El comando wmic no es confiable. En mi considerable experiencia, falla inesperadamente por muchas razones (en su mayoría inexplicables).

El mejor comando posible, debido a su confiabilidad, es el comando START. La sintaxis es muy simple (este es el comando de ejecución de 3 líneas para un archivo por lotes ):

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

En mi opinión, su alto grado de confiabilidad se debe al hecho de que establece el nivel de prioridad con el que se inicia el programa .exe, en lugar de tratar de entrometerse con prioridad después de que el programa ha comenzado a ejecutarse con una prioridad diferente.

Ed999
fuente