Sembra che tu possa fare qualcosa del tipo:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
I tempi in modalità utente e kernel sembrano essere espressi in 1 / 10.000.000 di secondo.
Dovresti essere in grado di post-elaborare quell'output per ottenere l'utilizzo della CPU al secondo.
Qui usando 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 ""
}'
Emette qualcosa del tipo:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
ogni secondo.
Si noti che se il processo di inattività del sistema mostra poco meno dell'800% su un sistema inattivo, ciò è dovuto al fatto che il sistema dispone di 8 core della CPU (ben almeno 8 thread) poiché ciò conta il tempo della CPU di tutte le CPU.
Si noti inoltre che quanto EVERY:1
sopra è una bugia. wmic
non sembra dare quell'output ogni secondo. È più probabile che trascorra circa 1 secondo tra ciascun rapporto e non compensa il tempo necessario per calcolare il rapporto. Quindi, in pratica, verrà eseguito ogni 1 secondo e un po ', il che significa che tali percentuali non sono molto precise e leggermente sopravvalutate.
top
), prova Process Explorer