Il semble que vous puissiez faire quelque chose comme:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
Les temps des modes utilisateur et noyau semblent y être exprimés en 1/10 000 000 de seconde.
Vous devriez pouvoir post-traiter cette sortie pour obtenir l'utilisation du processeur par seconde.
Ici en utilisant 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 ""
}'
Produit quelque chose comme:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
chaque seconde.
Notez que si le processus d'inactivité du système affiche un peu moins de 800% sur un système inactif, c'est parce que votre système a 8 cœurs de processeur (enfin au moins 8 threads) car cela compte le temps de processeur de tous les processeurs.
Notez également que ce qui EVERY:1
précède est un mensonge. wmic
ne semble pas donner cette sortie chaque seconde. Plus probablement, il dort environ 1 seconde entre chaque rapport et ne compense pas le temps qu'il faut pour calculer le rapport. Donc, en pratique, il fonctionnera toutes les 1 seconde et un peu ce qui signifie que ces pourcentages ne sont pas très précis et légèrement surestimés.
top
), essayez Process Explorer