ดูเหมือนว่าคุณสามารถทำสิ่งที่ชอบ:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
ผู้ใช้และโหมดเคอร์เนลเวลาดูเหมือนจะแสดงใน 1 / 10,000,000 ของวินาที
คุณควรจะสามารถโพสต์โปรเซสนั้นเพื่อรับการใช้งาน CPU ต่อวินาที
ที่นี่โดยใช้ 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 ""
}'
เอาต์พุตคล้าย:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
ทุกวินาที.
โปรดทราบว่าหากกระบวนการ Idle ของระบบแสดงน้อยกว่า 800% บนระบบที่ไม่ได้ทำงานนั่นเป็นเพราะระบบของคุณมี 8 คอร์ CPU (อย่างน้อย 8 เธรด) ซึ่งนับเวลา CPU ของ CPU ทั้งหมด
นอกจากนี้โปรดทราบว่าEVERY:1
ข้างต้นเป็นเรื่องโกหก wmic
ดูเหมือนจะไม่ให้ผลลัพธ์นั้นทุกวินาที มีโอกาสมากขึ้นที่จะนอนประมาณ 1 วินาทีระหว่างแต่ละรายงานและไม่ชดเชยเวลาที่ใช้ในการคำนวณรายงาน ดังนั้นในทางปฏิบัติมันจะทำงานทุก 1 วินาทีและเล็กน้อยซึ่งหมายความว่าเปอร์เซ็นต์เหล่านั้นไม่แม่นยำมากและประเมินค่าสูงไปเล็กน้อย
top
) ลองProcess Explorer