Có vẻ như bạn có thể làm một cái gì đó như:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Thời gian chế độ Người dùng và Hạt nhân dường như được biểu thị bằng 1 / 10.000.000 giây.
Bạn sẽ có thể xử lý hậu kỳ đầu ra đó để có được mức sử dụng CPU mỗi giây.
Ở đây sử dụng 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 ""
}'
Xuất ra một cái gì đó như:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
mỗi giây
Lưu ý rằng nếu Quá trình nhàn rỗi hệ thống chỉ hiển thị dưới 800% trên hệ thống nhàn rỗi, thì đó là vì hệ thống của bạn có 8 lõi CPU (ít nhất là 8 luồng) vì nó tính thời gian CPU của tất cả các CPU.
Cũng lưu ý rằng EVERY:1
ở trên là một lời nói dối. wmic
dường như không cung cấp đầu ra đó mỗi giây. Nhiều khả năng, nó ngủ khoảng 1 giây giữa mỗi báo cáo và không bù vào thời gian cần thiết để tính toán báo cáo. Vì vậy, trong thực tế, nó sẽ chạy cứ sau 1 giây và một chút, điều đó có nghĩa là những phần trăm đó không chính xác và được đánh giá quá cao.
top
), hãy thử Process Explorer