Здається, ви можете зробити щось на кшталт:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Часи режиму "Користувач" та "Ядро", схоже, виражаються в 1/1000000000 секунди.
Ви повинні мати можливість обробляти цей вихід, щоб отримати використання процесора за секунду.
Тут за допомогою 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 ""
}'
Виходить щось на кшталт:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
кожна секунда.
Зауважте, що якщо System Idle Process показує трохи менше 800% в режимі очікування, це тому, що у вашій системі є 8 ядер процесора (ну, принаймні, 8 потоків), як це враховує час процесора всіх процесорів.
Також зауважте, що EVERY:1
вищезгадане - брехня. wmic
схоже, не дає цього висновку щосекунди. Швидше за все, він проходить приблизно 1 секунду між кожним звітом і не компенсує час, необхідний для обчислення звіту. Тож на практиці вона працюватиме кожні 1 секунду і трохи, а це означає, що ці відсотки не дуже точні і трохи завищені.
top
), спробуйте Process Explorer