Parece que puedes hacer algo como:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Los tiempos de modo Usuario y Kernel parecen expresarse en 1/10 000 000 de segundo.
Debería poder procesar posteriormente esa salida para obtener el uso de CPU por segundo.
Aquí usando 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 ""
}'
Produce algo como:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
cada segundo.
Tenga en cuenta que si el proceso de inactividad del sistema muestra poco menos del 800% en un sistema inactivo, es porque su sistema tiene 8 núcleos de CPU (al menos 8 hilos) ya que cuenta el tiempo de CPU de todas las CPU.
También tenga en cuenta que lo EVERY:1
anterior es una mentira. wmic
no parece dar esa salida cada segundo. Lo más probable es que duerma aproximadamente 1 segundo entre cada informe y no compensa el tiempo que lleva calcular el informe. Entonces, en la práctica, se ejecutará cada 1 segundo y un poco, lo que significa que esos porcentajes no son muy precisos y están ligeramente sobreestimados.
top
), intente Process Explorer