Cygwin top命令 - 查看所有用户的进程

时间:2010-08-17 14:45:42

标签: cygwin

是否有人知道如何在Cygwin中使用top命令查看所有用户的进程(系统下的procps库的一部分)。

我知道这可以在* nix中完成,但我在Cygwin中苦苦挣扎。我尝试过使用pslist,但它在putty SSH控制台中没有表现。

我需要一个解决方案,我可以使用SSH看到top之类的对话框。我根本没有任何NTLM SSO访问Win2k3访客,所以ssh是唯一的方法。

3 个答案:

答案 0 :(得分:32)

top仅显示Cygwin进程。 ps -W也会列出Windows进程。

答案 1 :(得分:3)

很多时候,命令“tasklist”可以更有效地完成工作。它内置到windows中,只需确保您的System32文件夹是bash配置文件PATH的一部分。还有procps本身。您还应该尝试使用mintty作为您的终端。您可以随时尝试将任何这些任务应用程序附加到屏幕,或使用watch来轮询信息。

答案 2 :(得分:2)

看来你可以这样做:

wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1

用户和内核模式时间似乎以1 / 10,000,000秒表示。

您应该能够对该输出进行后处理以获得每秒的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秒运行一次,这意味着这些百分比不是很准确而且略高估。