Windows10でプロセスの優先度を指定する方法

 WindowsではタスクマネージャからGUIでプロセスの優先度を指定することが可能ですが、Unix系OSで言うところのniceコマンドのようにコマンドラインから指定する方法を知らなかったので調べてみました。
 

プロセス優先度の指定

新規に実行するプロセスの場合

 こちらの方法は割と有名だと思いますが、startコマンドで新規に実行するコマンドのプロセス優先度を指定して実行することが可能です。

REM メモ帳をプロセス優先度:低で起動する
start /low notepad.exe

 なお、プロセス優先度として指定可能なスイッチは以下の通りです。

  • low
  • belownormal
  • normal
  • abovenormal
  • high
  • realtime

 

既存プロセスの場合

 wmicコマンドで指定したプロセスの優先度を変更することが可能です。wmicはWMI(Windows Management Instrumentation)のCLIツールで、プロセス管理以外にも多様な操作が可能ですが、プロセス優先度を変更する場合には以下のように使用します。

REM (既に実行中の)メモ帳のプロセス優先度を通常以上に変更する
wmic process where name="notepad.exe" call setpriority "above normal"

 システム運用の現場では同一名のプロセスの存在を考慮し、プロセスID(PID)を特定してコマンドを叩きたいことの方が多いかもしれません。その場合は以下のようにします。

REM PID=59896のプロセス優先度を通常以上に変更する
wmic process where processid=59896 call setpriority "above normal"

 なお、プロセス優先度として指定可能なパラメータは以下の通りです。startコマンドのスイッチと異なり、lowはidleになっている点と、below/above normalは間にスペースが入るため前後をダブルクォーテーションで括る必要がある点には留意が必要です。

  • idle
  • below normal
  • normal
  • above normal
  • high priority
  • realtime

 

補足

プロセスIDの特定

 タスクマネージャのGUI*1から確認することも可能ですが、コマンドラインから特定する場合は以下のようにします。

REM メモ帳のプロセス情報を取得する
tasklist /FI "IMAGENAME eq notepad.exe" /V /FO LIST

 PowerShellを使うことが可能な環境であれば、tasklistコマンドでは得られない開始時刻やプロセス優先度などの情報を得ることもできます。

# メモ帳のPID, 名称, 開始時刻, プロセス優先度, パスを取得
Get-Process notepad | Select-object Id, Name, StartTime, PriorityClass, Path
# Get-ProcessのエイリアスとしてGPSが利用可能なので以下でも同等
GPS notepad | Select-object Id, Name, StartTime, PriorityClass, Path

 なお、Get-Processで得られる情報には他にも以下のような項目があります*2

  • Handles
  • Name
  • NPM
  • PM
  • SI
  • VM
  • WS
  • Disposed
  • ErrorDataReceived
  • Exited
  • OutputDataReceived
  • BeginErrorReadLine
  • BeginOutputReadLine
  • CancelErrorRead
  • CancelOutputRead
  • Close
  • CloseMainWindow
  • CreateObjRef
  • Dispose
  • Equals
  • GetHashCode
  • GetLifetimeService
  • GetType
  • InitializeLifetimeService
  • Kill
  • Refresh
  • Start
  • ToString
  • WaitForExit
  • WaitForInputIdle
  • __NounName
  • BasePriority
  • Container
  • EnableRaisingEvents
  • ExitCode
  • ExitTime
  • Handle
  • HandleCount
  • HasExited
  • Id
  • MachineName
  • MainModule
  • MainWindowHandle
  • MainWindowTitle
  • MaxWorkingSet
  • MinWorkingSet
  • Modules
  • NonpagedSystemMemorySize
  • NonpagedSystemMemorySize64
  • PagedMemorySize
  • PagedMemorySize64
  • PagedSystemMemorySize
  • PagedSystemMemorySize64
  • PeakPagedMemorySize
  • PeakPagedMemorySize64
  • PeakVirtualMemorySize
  • PeakVirtualMemorySize64
  • PeakWorkingSet
  • PeakWorkingSet64
  • PriorityBoostEnabled
  • PriorityClass
  • PrivateMemorySize
  • PrivateMemorySize64
  • PrivilegedProcessorTime
  • ProcessName
  • ProcessorAffinity
  • Responding
  • SafeHandle
  • SessionId
  • Site
  • StandardError
  • StandardInput
  • StandardOutput
  • StartInfo
  • StartTime
  • SynchronizingObject
  • Threads
  • TotalProcessorTime
  • UserProcessorTime
  • VirtualMemorySize
  • VirtualMemorySize64
  • WorkingSet
  • WorkingSet64
  • PSConfiguration
  • PSResources
  • Company
  • CPU
  • Description
  • FileVersion
  • Path
  • Product
  • ProductVersion

 



以上。

*1:[詳細]タブで[列の選択]-[PID]にチェックが必要

*2:同じ情報はGet-Process | Get-Memberとすれば得られる