Il semble que vous pouvez faire quelque chose comme:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
L'utilisateur et le mode noyau fois il semble être exprimé en 1/10000000ème de seconde.
Vous devriez pouvoir post-traiter cette sortie pour obtenir l'utilisation du processeur par seconde.
ici en utilisant Cygwin de 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 ""
}'
Sorties 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 inactif du système montre un peu moins de 800% sur un système de ralenti, c'est parce que votre système dispose de 8 cœurs de processeur (bien au moins 8 fils) comme qui compte le temps CPU de toutes les unités centrales.
Notez également que le EVERY:1
ci-dessus est un mensonge. wmic
ne semble pas donner cette sortie toutes les secondes. 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 secondes et un peu, ce qui signifie que ces pourcentages ne sont pas très précis et légèrement surestimés.
Après plusieurs années passées à travailler avec Cygwin, je me suis orienté vers l'utilisation de ProcessExplorer et de Windows 7+ intégré à Resource Monitor. J'aime vraiment les deux et j'ai trouvé que Process Monitor est un excellent outil pour inspecter les processus qui frappent très lourdement les E/S de fichiers. –
Comment utilisez-vous 'PROCEXP.EXE' ou' PROCMON.EXE' sur 'ssh'? Ont-ils un mode terminal? –