如何在命令行上获取 Windows Pid 的 cpu% 使用率?

How can I get the cpu% usage of a Windows Pid on the command line?

我知道有很多方法可以通过进程名称获取此信息,但我有许多名称相同的进程 (Java),因此需要使用 PID。

很高兴使用任何可以完成此任务的 tool/language。

最终这将使用 Cygwin 调用。 谢谢

您可以使用快速 powershell 脚本:

$searchPid = 6204
get-process | where-object Id -eq $searchPid | select-object CPU

在命令行中,你应该只需要这个:

powershell "get-process | where-object Id -eq 6204 | select-object CPU"

更新

如评论中所述,get-process returns 仅获取进程使用的 CPU 时间(以秒为单位),因此它对 CPU 的使用百分比没有帮助.看起来 WMI 调用应该为您获得该百分比:

powershell "get-wmiobject Win32_PerfFormattedData_PerfProc_Process | where-object idprocess -eq 6204 | select PercentProcessorTime"

您可以使用 psTools 尝试以下命令

pslist <pid> -s 

这个 VB 脚本似乎可以解决问题,在命令行上传递 pid: (初始 for 循环可以省略) </p> <pre>For Each Process in GetObject("winmgmts:").ExecQuery("Select * from Win32_Process where Handle = " & WScript.Arguments.Item(0) & "") WScript.echo Process.Handle & " " & Process.name & " " & CPUUSage(Process.Handle) & " %" Next Function CPUUSage( ProcID ) On Error Resume Next Set objService = GetObject("Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2") For Each objInstance1 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N1 = objInstance1.PercentProcessorTime D1 = objInstance1.TimeStamp_Sys100NS Exit For Next WScript.Sleep(2000) For Each perf_instance2 in objService.ExecQuery("Select * from Win32_PerfRawData_PerfProc_Process where IDProcess = '" & ProcID & "'") N2 = perf_instance2.PercentProcessorTime D2 = perf_instance2.TimeStamp_Sys100NS Exit For Next Const wbemFlagReturnImmediately = &h10 Const wbemFlagForwardOnly = &h20 strComputer = "." Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _ wbemFlagReturnImmediately + wbemFlagForwardOnly) For Each objItem In colItems Nc = objItem.NumberOfLogicalProcessors Next ' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 Nd = (N2 - N1) Dd = (D2 - D1) ' Nd/Dd = number of cores used. ' ((Nd/Dd)/Nc) * 100 = % of whole box used PercentProcessorTime = ((Nd/Dd)/Nc)*100 CPUUSage = Round(PercentProcessorTime ,2) End Function

例如(在 cygwin 中)如果以上内容在文件 cpu.vbs 中: cmd /c cscript /nologo cpu.vbs 64940