Görünüşe göre böyle bir şey yapabilirsiniz:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Kullanıcı ve Çekirdek modu süreleri saniyenin 1 / 10.000.000'inde ifade edilir.
Saniyede CPU kullanımını elde etmek için bu çıkışı sonradan işleyebilmelisiniz.
Burada cygwin's kullanarak 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 ""
}'
Gibi bir şey çıktılar:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
her saniye.
Not ki eğer Sistem Boşta İşlemi gösterileri sistem o sayıları gibi 8 CPU çekirdeği (iyi, en azından 8 Konu) tüm CPU CPU süresi olduğundan bulunuyor boşta sistem üzerinde hemen altında% 800.
Ayrıca EVERY:1
yukarıdakinin bir yalan olduğunu unutmayın . wmic
bu çıktıyı her saniye veriyor gibi görünmüyor. Büyük olasılıkla, her rapor arasında yaklaşık 1 saniye uyur ve raporu hesaplamak için gereken süreyi telafi etmez. Yani pratikte, her 1 saniyede bir çalışacak ve bu da bu yüzdelerin çok doğru olmadığı ve biraz fazla tahmin edilemeyeceği anlamına geliyor.
top