Alterando a prioridade do processo do Windows via linha de comando

42

Quero alterar a prioridade do processo do Windows via linha de comando.

Como eu posso fazer isso?

Bobs
fonte

Respostas:

55

A sintaxe da linha de comando:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Exemplo:

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

ou

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

Prioridade:

  • inativo: 64 (ou "inativo")
  • abaixo do normal: 16384 (ou "abaixo do normal")
  • normal: 32 (ou "normal")
  • acima do normal: 32768 (ou "acima do normal")
  • alta prioridade: 128 (ou "alta prioridade")
  • tempo real: 256 (ou "tempo real")
Bobs
fonte
7
Você também pode fazer wildcards wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex
É possível fazer o mesmo para o plano de fundo (baixa IO e prioridade de memória) como no Process Explorer?
Miky 5/08/14
isso funcionará mesmo em "cmd.exe" do lote? ... lote que iniciará o cmd.exe?
Gamer0
Nota: o primeiro conjunto de aspas é obrigatório, portanto, em outros invólucros, as aspas devem ser escapadas (ou entre aspas duplas). Em Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo
2
por que o valor abaixo / acima do normal é tão grande e estranho? E por que o normal é menor que o ocioso e o tempo real?
Phuclv
11

Uma pequena adição.

Você também pode usar valores de sequência em vez de números inteiros (mais fáceis de memorizar) assim:

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

Valores possíveis: "inativo", "baixo", "abaixo do normal", "normal", "acima do normal", "alta prioridade", "tempo real"

PS. Não esqueça as aspas, especialmente se estiver usando várias palavras em um valor de sequência

Cinzeiro
fonte
O primeiro conjunto de aspas é obrigatório, mesmo que não esteja usando várias palavras. Também deve ser passado ao comando, em vez de ser interpretado pelo shell.
piojo 7/08/19
No win10 Pro 1809, "baixo" não é um valor reconhecido - gera um erro. usando "ocioso" faz com que o processo para ser exibido como "baixa" prioridade no gerenciador de tarefas ...
ljwobker
5

Na linha de comando em lote, eu simplesmente usaria o PowerShell. Este exemplo inicia o calc.exe, encontra seu processo e ajusta sua classe de prioridade para "IDLE", também conhecido como LOW:

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

Especifique um dos seguintes valores de enumeração: " Normal, Idle, High, RealTime, BelowNormal, AboveNormal"

Aqui está a mesma coisa do PowerShell com linhas divididas:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE
Knuckle-Dragger
fonte
Qual é o sentido de repetir o que já foi dito antes?
harrymc
@harrymc Responde à pergunta original, usando o PowerShell.
Paradroid
@harrymc - na verdade, estou repetindo o que disse do DEC. stackoverflow.com/questions/20693028/…
Knuckle-Dragger 15/02
Sem problemas. Só que eu liguei para algo bem parecido.
harrymc
5

Além das respostas existentes, a pergunta Windows Equivalent of 'nice' lista mais algumas soluções:

  1. Usando o comando START no prompt de comando (CMD).
  2. Usando o ProcessTamer gratuito para configurar uma regra no .exe que é aplicada automaticamente sempre que esse processo é iniciado.
  3. Usando um script do PowerShell contido aqui .
  4. Usando um script VBScript contido aqui .

Além disso, o antigo utilitário SetPriority ainda pode funcionar, mas não o tenho testado há muitos anos.

Algumas dessas soluções podem não funcionar nos serviços do sistema ou podem precisar ser executadas como administrador .

harrymc
fonte
O obstáculo óbvio com a solução vbScript é que são necessárias 23 linhas de código para realizar sua tarefa (ou seja, definir o nível de prioridade), onde o comando START leva apenas 2 linhas para fazê-lo (uma, em um beliscão, portanto, até funciona em um prompt de comando simples): inicie "" / realtime / b / w program.exe
Ed999
1

Estou executando o Windows 7 de 64 bits.

O comando wmic não é confiável. Na minha experiência considerável, ele falha inesperadamente por muitas razões (na maioria inexplicáveis).

O melhor comando possível, devido à sua confiabilidade, é o comando START. A sintaxe é muito simples (este é o comando de execução em três linhas para um arquivo em lotes ):

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

Na minha opinião, seu alto grau de confiabilidade decorre do fato de definir o nível de prioridade com o qual o programa .exe é iniciado, em vez de tentar interferir na prioridade depois que o programa começar a ser executado com uma prioridade diferente.

Ed999
fonte