Es scheint, dass Sie etwas tun können wie:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Die Benutzer- und Kernelmoduszeiten dort scheinen in 1 / 10.000.000stel Sekunden ausgedrückt zu sein.
Sie sollten in der Lage sein, diese Ausgabe nachzubearbeiten, um die CPU-Auslastung pro Sekunde zu ermitteln.
Hier mit cygwin's perl
:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1 |
perl -lne '
if (/\S/) {
my ($k,$c,$p,$u) = split /\s{2,}/;
$n{"$p\t$c"}=$k+$u;
} else {
my %c;
for my $k (keys %n) {
$c{$k} = $n{$k} - $o{$k} if defined $o{$k}
}
print "$_\t" . $c{$_}/1e5 for (sort {$c{$b}<=>$c{$a}} keys %c)[0..20];
%o = %n; %n = undef; print ""
}'
Gibt so etwas aus wie:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
jede Sekunde.
Beachten Sie, dass, wenn der System-Leerlaufprozess auf einem Leerlaufsystem knapp 800% anzeigt, dies daran liegt, dass Ihr System über 8 CPU-Kerne verfügt (mindestens 8 Threads), da dies die CPU-Zeit aller CPUs zählt.
Beachten Sie auch, dass das EVERY:1
oben Genannte eine Lüge ist. wmic
scheint diese Ausgabe nicht jede Sekunde zu geben. Wahrscheinlicher ist, dass zwischen den einzelnen Berichten ungefähr 1 Sekunde vergeht und die für die Berechnung des Berichts erforderliche Zeit nicht kompensiert wird. In der Praxis läuft es also alle 1 Sekunde und ein bisschen, was bedeutet, dass diese Prozentsätze nicht sehr genau sind und leicht überschätzt werden.
top
) benötigen, versuchen Sie Process Explorer