2016-05-11 1 views
3

Je suis conscient de plusieurs façons d'obtenir ceci par nom de processus mais j'ai beaucoup de processus avec des noms identiques (Java) donc j'ai besoin d'utiliser le PID.Comment puis-je obtenir l'utilisation du processeur cpu% d'un Windows Pid sur la ligne de commande?

Heureux d'utiliser n'importe quel outil/langage qui serait fait cela.

Finalement, ce serait appelé en utilisant Cygwin. Merci

+0

S'il vous plaît avoir poster votre code –

+0

Je pense que ce message réponse à votre question: http : //stackoverflow.com/questions/25292737/cygwin-to-display-cpu-usage-of-a-process – Keni

+0

Merci, mais je ne crois pas que PsTools vous donne une valeur de CPU% pour un processus – GlorianChris

Répondre

0

Cette VB Script semble faire l'affaire, en passant le pid sur la ligne de commande : (initial pour la boucle pourrait être omise)

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 

Par exemple (dans Cygwin) si ce qui précède est dans le fichier cpu.vbs: cmd/c cscript/cpu.vbs nologo 64940

0

Vous pouvez utiliser un script Powershell rapide:

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

Sur la ligne de commande, vous devez juste besoin ceci:

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

MISE À JOUR

Comme il est indiqué dans les commentaires , get-process renvoie seulement le temps CPU utilisé par le processus en secondes, donc cela n'aide pas avec le pourcentage de sage de la CPU. On dirait un appel WMI devrait obtenir ce pourcentage pour vous:

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

Merci - cela donne un valeur sous la rubrique CPU - qu'est-ce que cela représente? Le processus Java que je regarde est inactif et la valeur fournie par le script ci-dessus était 1123.328 ... – GlorianChris

+0

Bon appel - J'avais déjà utilisé la cmdlet à d'autres fins, mais je n'avais pas réalisé que ce n'était pas le pourcentage de CPU. Par TechNet - "La quantité de temps processeur que le processus a utilisé sur tous les processeurs, en secondes.", Alors laissez-moi trouver une meilleure cmdlet/appel à utiliser. Désolé pour ça. –

+0

J'ai ajouté une mise à jour pour obtenir le pourcentage de CPU –

0

Vous pouvez essayer la commande ci-dessous avec PSTools

pslist <pid> -s 
+0

Cela donne un temps processeur et un temps écoulé, pas cpu% – GlorianChris