Cygwin top命令-请参阅所有用户的流程

Cygwin top命令-请参阅所有用户的流程,cygwin,Cygwin,有人知道如何使用Cygwin中的top命令(系统下procps库的一部分)查看所有用户的进程吗 我知道这可以在*尼克斯完成,但我在Cygwin苦苦挣扎。我尝试过使用pslist,但它在putty SSH控制台中不起作用 我需要有一个解决方案,在这个解决方案中,我可以使用SSH看到类似于top的对话框。我根本没有任何对Win2k3来宾的NTLM SSO访问权限,因此ssh是唯一进入的方式。top仅显示Cygwin进程ps-W也将列出Windows进程。许多时候,“tasklist”命令可以更有效地

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

我知道这可以在*尼克斯完成,但我在Cygwin苦苦挣扎。我尝试过使用
pslist
,但它在putty SSH控制台中不起作用


我需要有一个解决方案,在这个解决方案中,我可以使用SSH看到类似于
top
的对话框。我根本没有任何对Win2k3来宾的NTLM SSO访问权限,因此ssh是唯一进入的方式。

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

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

看起来你可以做如下事情:

wmic process get ProcessId,Name,UserModeTime,KernelModeTime /EVERY:1
0       System Idle Process     588.12377
2196    sh.exe  107.00075
248     svchost.exe     85.80055
7140    explorer.exe    26.52017
[...]
那里的用户和内核模式时间似乎以1/10000000秒表示

您应该能够对输出进行后期处理,以获得每秒的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 ""
    }'
每一秒

请注意,如果系统空闲进程在空闲系统上显示略低于800%,那是因为您的系统有8个CPU内核(至少有8个线程),这将计算所有CPU的CPU时间


还要注意,上面的
EVERY:1
是一个谎言
wmic
似乎并不是每秒都给出那个输出。更有可能的是,它在每个报告之间大约休眠1秒,并且不能补偿计算报告所需的时间。因此,在实践中,它将每隔1秒运行一次,这意味着这些百分比不是非常准确,而且有点高估。

在断断续续地使用Cygwin多年后,我开始使用ProcessExplorer和Windows 7+内置资源监视器。我真的很喜欢这两种方法,但发现Process Monitor是检查严重影响文件I/O的进程的极好工具。如何在
ssh
上使用
procep.EXE
PROCMON.EXE
?他们有终端模式吗?下面的链接显示了一种方式:谢谢
TASKLIST/FO CSV/NH
以可解析的方式为您提供具有第二粒度的进程CPU时间(自启动以来),因此您可以以100秒的间隔运行两次,以大致了解最大的长期运行CPU使用进程。