Tampaknya Anda dapat melakukan sesuatu seperti:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Mode Pengguna dan Kernel kali di sana tampaknya dinyatakan dalam 1 / 10.000.000 detik.
Anda harus dapat memposting-proses output itu untuk mendapatkan penggunaan CPU per detik.
Di sini menggunakan cygwin 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 ""
}'
Menghasilkan sesuatu seperti:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
setiap detik.
Perhatikan bahwa jika System Idle Process menunjukkan kurang dari 800% pada sistem idle, itu karena sistem Anda memiliki 8 core CPU (setidaknya 8 thread) yang menghitung waktu CPU dari semua CPU.
Perhatikan juga bahwa di EVERY:1
atas adalah dusta. wmic
tampaknya tidak memberikan output setiap detik. Kemungkinan besar, itu tidur sekitar 1 detik antara setiap laporan dan tidak mengkompensasi waktu yang diperlukan untuk menghitung laporan. Jadi dalam praktiknya, ini akan berjalan setiap 1 detik dan sedikit yang berarti persentase tersebut tidak terlalu akurat dan sedikit berlebihan.
top
), coba Process Explorer