我知道通过进程名得到这个的许多方法,但是我有许多相同名称的进程(Java),所以需要使用PID。
很高兴使用任何工具/语言来完成这件事。
最终这将被称为使用Cygwin。 谢谢
您可以使用psTools来尝试下面的命令
pslist <pid> -s
你可以使用一个快速的PowerShell脚本:
$searchPid = 6204 get-process | where-object Id -eq $searchPid | select-object CPU
在命令行,你应该只需要这个:
powershell "get-process | where-object Id -eq 6204 | select-object CPU"
UPDATE
如注释中所述,get-process只返回进程已经使用的CPU时间,因此它不能帮助CPU的使用百分比。 看起来像一个WMI调用应该得到你的百分比:
powershell "get-wmiobject Win32_PerfFormattedData_PerfProc_Process | where-object idprocess -eq 6204 | select PercentProcessorTime"
这VB脚本似乎做的伎俩,传递在命令行上的PID:(初始循环可以省略)
对于GetObject(“winmgmts:”)中的每个进程,ExecQuery(“Select * from Win32_Process where Handle =”&WScript.Arguments.Item(0)&“”) WScript.echo Process.Handle&“”&Process.name&“”&CPUUSage(Process.Handle)&“%” 下一个 函数CPUUSage(ProcID) 在错误恢复下一步 Set objService = GetObject(“Winmgmts:{impersonationlevel = impersonate}!\ Root \ Cimv2”) 对于objService.ExecQuery中的每个objInstance1(“Select * from Win32_PerfRawData_PerfProc_Process where IDProcess ='”&ProcID&“'”) N1 = objInstance1.PercentProcessorTime D1 = objInstance1.TimeStamp_Sys100NS 退出 下一个 WScript.Sleep(2000) 对于objService.ExecQuery(“Select * from Win32_PerfRawData_PerfProc_Process where IDProcess ='”&ProcID&“'”)中的每个perf_instance2, N2 = perf_instance2.PercentProcessorTime D2 = perf_instance2.TimeStamp_Sys100NS 退出 下一个 const wbemFlagReturnImmediately =&h10 常量wbemFlagForwardOnly =&h20 strComputer =“。” 设置objWMIService = GetObject(“winmgmts:\\”&strComputer&“\ root \ CIMV2”) 设置colItems = objWMIService.ExecQuery(“SELECT * FROM Win32_Processor”,“WQL”,_ wbemFlagReturnImmediately + wbemFlagForwardOnly) 对于每个对象在colItems中 Nc = objItem.NumberOfLogicalProcessors 下一个 'CounterType - PERF_100NSEC_TIMER_INV 公式 - (1-((N2-N1)/(D2-D1)))×100 Nd =(N2-N1) Dd =(D2-D1) Nd / Dd =使用的核心数量。 '((Nd / Dd)/ Nc)* 100 =整箱使用的百分比 PercentProcessorTime =((Nd / Dd)/ Nc)* 100 CPUUSage = Round(PercentProcessorTime,2) 结束功能
例如(在cygwin中)如果上面的文件是cpu.vbs:cmd / c cscript / nologo cpu.vbs 64940