Modification de la priorité des processus Windows via la ligne de commande

42

Je souhaite modifier la priorité des processus Windows via la ligne de commande.

Comment puis je faire ça?

Bobs
la source

Réponses:

55

La syntaxe de ligne de commande:

wmic process where name="AppName" CALL setpriority ProcessIDLevel

Exemple:

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

ou

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

Priorité:

  • inactif: 64 (ou "inactif")
  • sous la normale: 16384 (ou "sous la normale")
  • normal: 32 (ou "normal")
  • au-dessus de la normale: 32768 (ou "au-dessus de la normale")
  • haute priorité: 128 (ou "haute priorité")
  • temps réel: 256 (ou "temps réel")
Bobs
la source
7
Vous pouvez également faire des wildcards wmic process where "CommandLine like '%calc%'" CALL setpriority "below normal"
laggingreflex
Il est possible de faire la même chose pour l’arrière-plan (priorité faible d’IO et mémoire) comme dans Process Explorer?
Miky
cela fonctionnera-t-il même sur "cmd.exe" du lot? ... lot qui va démarrer que cmd.exe?
gamer0
Remarque: le premier jeu de guillemets est obligatoire. Par conséquent, dans les autres shells, les guillemets doivent être échappés (ou cotés deux fois). Dans Cygwin:wmic process where 'name="calc.exe"' CALL setpriority "idle"
piojo
2
Pourquoi la valeur inférieure / supérieure à la normale est-elle si grande et si étrange? Et pourquoi la normale est-elle inférieure à la fois au ralenti et au temps réel?
phuclv
11

Un petit ajout.

Vous pouvez également utiliser des valeurs de chaîne au lieu d’entiers (plus faciles à mémoriser) comme ceci:

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

Valeurs possibles: "inactif", "faible", "inférieur à la normale", "normal", "supérieur à la normale", "priorité élevée", "temps réel"

PS N'oubliez pas les guillemets, surtout si vous utilisez plusieurs mots dans une valeur de chaîne

Cendrier
la source
Le premier ensemble de guillemets est obligatoire, même si vous n'utilisez pas plusieurs mots. Il doit également être passé à la commande, plutôt que d'être interprété par le shell.
Piojo
Sur win10 Pro 1809, "bas" n'est pas une valeur reconnue - cela génère une erreur. L'utilisation de "Idle" entraîne l'affichage du processus avec une priorité "faible" dans le gestionnaire de tâches ...
ljwobker
5

En ligne de commande batch, j'utiliserais simplement PowerShell. Cet exemple démarre avec calc.exe, trouve son processus et ajuste sa classe de priorité sur "IDLE", autrement dit LOW:

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

Spécifiez l'une des valeurs d'énumération suivantes: "Normal, Idle, High, RealTime, BelowNormal, AboveNormal "

Voici la même chose de PowerShell avec les lignes divisées:

calc.exe
$prog = Get-Process -Name calc
$prog.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::IDLE
Knuckle-Dragger
la source
A quoi bon répéter ce qui a déjà été dit?
harrymc
@harrymc Il répond à la question initiale en utilisant PowerShell.
paradroid
@ charrymc - en fait, je répète ce que j'ai dit de décembre. stackoverflow.com/questions/20693028/…
Knuckle-Dragger
Aucun problème. Juste que j'ai lié à quelque chose d'assez similaire.
harrymc
5

Outre les réponses existantes, la question Windows Equivalent de 'nice' répertorie d'autres solutions:

  1. Utilisation de la commande START dans l'invite de commande (CMD).
  2. Utilisation de la gratuité ProcessTamer pour configurer une règle sur le fichier .exe automatiquement appliquée à chaque démarrage de ce processus.
  3. Utilisation d'un script PowerShell contenu ici .
  4. Utiliser un script VBScript contenu ici .

En outre, l'ancien SetPriority utilitaire peut encore fonctionner, mais je ne l'ai pas essayé depuis de nombreuses années.

Certaines de ces solutions peuvent ne pas fonctionner sur les services système ou doivent être exécutées en tant qu'administrateur .

harrymc
la source
Le problème évident avec la solution vbScript est qu’il faut 23 lignes de code pour accomplir sa tâche (c’est-à-dire définir le niveau de priorité), la commande START ne prenant que 2 lignes pour le faire (une, par pincement, elle fonctionne même une invite de commande nue): démarrer "" / realtime / b / w program.exe
Ed999
1

J'utilise Windows 7 64 bits.

La commande wmic n'est pas fiable. Dans ma grande expérience, il échoue de manière inattendue pour de trop nombreuses raisons (pour la plupart inexplicables).

La meilleure commande possible, en raison de sa fiabilité, est la commande START. La syntaxe est très simple (il s'agit de la commande d'exécution à 3 lignes pour un fichier batch ):

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

À mon avis, son degré élevé de fiabilité découle du fait qu’il définit le niveau de priorité avec lequel le programme .exe est lancé, plutôt que d’essayer de modifier la priorité une fois que le programme a commencé à s’exécuter avec une priorité différente.

Ed999
la source