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
以上。