有没有办法不断显示Cygwin中的Windows进程


13

我想使用top或变体从cygwin shell监视进程。原因是它的实时报告和不断更新。但是在cygwin下,top不会报告Windows进程。

我一直建议ps -W在其他论坛上使用它作为替代方法,但这显然具有以下缺点:不再提供实时信息,而是在我键入命令时仅提供静态快照。

有什么方法可以top在cygwin中显示我的所有进程,而不仅仅是cygwins进程?


1
它必须专门基于Cygwin是否有原因?如果您只想以表格格式(例如top)提供有关正在运行的Windows进程的详细数据列表,请尝试使用Process Explorer
Darth Android

Answers:


12

在bash shell中,您可以使用以下命令行监视所有Windows进程:

watch "ps -W" # pipe to grep for filtering

要查看所有Java进程,例如:

watch "ps -W | grep java"

请注意,“ ps -W”同时列出了cygwin和非cygwin进程。


无论是上班ps -W还是ps --windows下班,请参阅ps --help
Timo,


1

看来您可以执行以下操作:

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秒钟,并且不补偿计算报告所花费的时间。因此,在实践中,它将每隔一秒钟运行一次,这意味着这些百分比不是很准确,并且被高估了一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.