Wydaje można zrobić coś takiego:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
użytkownika i trybu jądra czasy nie wydają się być wyrażona w 1/10,000,000th sekundy.
Powinieneś być w stanie postprocesować to wyjście, aby uzyskać zużycie procesora na sekundę.
Tutaj użyciu cygwin na 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 ""
}'
wyjść coś takiego:
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
każda sekunda.
Należy zauważyć, że jeśli proces bezczynności systemu pokazuje w systemie bezczynności poniżej 800%, dzieje się tak dlatego, że system ma 8 rdzeni procesora (a przynajmniej 8 wątków), ponieważ zlicza czas procesora dla wszystkich procesorów.
Należy również zauważyć, że powyższy EVERY:1
jest kłamstwem. wmic
wydaje się nie dawać tego wyjścia co sekundę. Bardziej prawdopodobne jest, że śpi około 1 sekundy pomiędzy każdym raportem i nie rekompensuje czasu potrzebnego na obliczenie raportu. Tak więc w praktyce będzie działał co 1 sekundę i trochę, co oznacza, że te wartości procentowe nie są zbyt dokładne i nieco przeszacowane.
Po wielu latach pracy z Cygwin w kółko zacząłem używać ProcessExplorer i Windows 7+ wbudowanych w Monitor zasobów. Bardzo podoba mi się oba, ale udało mi się odkryć, że Monitor Procesu jest doskonałym narzędziem do inspekcji procesów, które bardzo mocno uderzają we wesele pliku. –
Jak używać 'PROCEXP.EXE' lub' PROCMON.EXE' zamiast 'ssh'? Czy mają tryb terminalowy? –