Answers:
您必须为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秒表示。
您应该能够对该输出进行后处理,以获取每秒的CPU使用率。
这里使用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 ""
}'
输出类似:
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秒钟,并且不补偿计算报告所花费的时间。因此,在实践中,它将每隔一秒钟运行一次,这意味着这些百分比不是很准确,并且被高估了一点。
top
)提供有关正在运行的Windows进程的详细数据列表,请尝试使用Process Explorer