Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在命令行上获取Windows Pid的cpu%使用率?_Java_Windows_Cpu_Pid - Fatal编程技术网

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

Java 如何在命令行上获取Windows Pid的cpu%使用率?,java,windows,cpu,pid,Java,Windows,Cpu,Pid,我知道有很多方法可以通过进程名来实现这一点,但是我有很多进程都有相同的名称(Java),所以需要使用PID 很乐意使用任何工具/语言来完成这项工作 最终,这将使用Cygwin调用。 谢谢您可以使用快速powershell脚本: $searchPid = 6204 get-process | where-object Id -eq $searchPid | select-object CPU 在命令行中,您应该只需要以下内容: powershell "get-process | where-ob

我知道有很多方法可以通过进程名来实现这一点,但是我有很多进程都有相同的名称(Java),所以需要使用PID

很乐意使用任何工具/语言来完成这项工作

最终,这将使用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进程只返回进程已使用的CPU时间(以秒为单位),因此它对CPU使用率的百分比没有帮助。看起来WMI调用应该为您获得该百分比:

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

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

pslist <pid> -s 
pslist-s

这个VB脚本似乎做到了这一点,在命令行上传递pid: (可省略循环的初始值)

对于GetObject(“winmgmts:”).ExecQuery(“从Win32中选择*_Process where Handle=“&WScript.Arguments.Item(0)&”)中的每个进程 WScript.echo Process.Handle&&&Process.name&&CPUUSage(Process.Handle)&% 下一个 函数CPUUSage(ProcID) 出错时继续下一步 设置objService=GetObject(“Winmgmts:{impersonationlevel=impersonate}!\Root\Cimv2”) 对于objService.ExecQuery中的每个objInstance1(“从Win32中选择*_PerfRawData_PerfProc_Process,其中IDProcess='”&ProcID&'”) N1=对象1.0%处理时间 D1=对象1.TimeStamp\u Sys100NS 退出 下一个 WScript.Sleep(2000年) 对于objService.ExecQuery中的每个perf_instance2(“从Win32_PerfRawData_PerfProc_进程中选择*,其中IDProcess='”&ProcID&'”) N2=性能实例2.0%ProcessorTime D2=perf_instance2.TimeStamp_Sys100NS 退出 下一个 Const WBEMFlagReturnInstant=&h10 常量wbemFlagForwardOnly=&h20 strComputer=“” 设置objWMIService=GetObject(“winmgmts:\\”&strComputer&“\root\CIMV2”) 设置colItems=objWMIService.ExecQuery(“从Win32_处理器中选择*”、“WQL”_ WBEMFlagReturn立即+wbemFlagForwardOnly) 对于每个对象,在colitem中 Nc=objItem.NumberOfLogicalProcessors 下一个 '计数器类型-性能\u 100NSEC\u定时器\u INV '式-(1-((N2-N1)/(D2-D1)))x 100 Nd=(N2-N1) Dd=(D2-D1) 'Nd/Dd=使用的芯数。 “((Nd/Dd)/Nc)*100%%使用的整个箱子 百分比处理时间=((Nd/Dd)/Nc)*100 CPUUSage=四舍五入(百分比处理时间,2) 端函数

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

请发布您的代码我想这篇文章已经回答了您的问题:谢谢,但我不相信PsTools为进程提供了cpu%的值谢谢-这在cpu标题下提供了一个值-这代表什么?我正在查看的Java进程是空闲的,上面的脚本给出的值是1123.328…很好的调用-我以前曾将cmdlet用于其他目的,但没有意识到这不是CPU百分比。Per TechNet—“进程在所有处理器上使用的处理器时间量,以秒为单位。”,因此,让我找到一个更好的cmdlet/调用来使用。很抱歉。谢谢-这是1个内核的%还是所有内核?我不确定这个值是否正确-根据Task Manager,我有一个正在运行的进程使用了40+%,但上面的命令似乎被固定在100。我相信这是所有内核的总数,但您可以通过运行此命令进行检查,看看非“_total”项的结果加起来是100还是100*(#个内核)对不起,不确定您所说的非“_total”项提供CPU时间和运行时间,而不是CPU% 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