回答:
cygwin用のprocpsライブラリをインストールする必要があります。これには最上位プログラムが含まれますが、cygwinで実行されているプロセスのみがリストされます。Windowsで実行されているすべてのプロセスを確認するには、この回答を参照してください:https : //stackoverflow.com/questions/3503681/cygwin-top-command-see-processes-for-all-users
次のようなことができるようです:
wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
そこにあるユーザーおよびカーネルモードの時間は、1 / 10,000,000秒で表されるようです。
その出力を後処理して、1秒あたりのCPU使用率を取得できるはずです。
ここでは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 ""
}'
次のようなものを出力します。
0 System Idle Process 588.12377
2196 sh.exe 107.00075
248 svchost.exe 85.80055
7140 explorer.exe 26.52017
[...]
毎秒。
アイドル状態のシステムでシステムアイドルプロセスが800%未満を示しているのは、システムに8つのCPUコア(少なくとも8つのスレッド)があり、すべてのCPUのCPU時間をカウントしているためです。
また、EVERY:1
上記は嘘であることに注意してください。wmic
その出力を毎秒与えるようには見えません。多くの場合、各レポート間で約1秒間スリープし、レポートの計算にかかる時間を補正しません。そのため、実際には1秒ごとに実行されるため、これらの割合はあまり正確ではなく、わずかに過大評価されます。
top
試してください