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

Cygwin top command - See processes for all users

提问人:Timothy C. Quinn 提问时间:8/17/2010 最后编辑:YamanekoTimothy C. Quinn 更新时间:10/22/2016 访问量:28529

问:

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

我知道这可以在 *nix 中完成,但我在 Cygwin 中苦苦挣扎。我尝试使用,但它在腻子 SSH 控制台中表现不佳。pslist

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

Cygwin(赛格温酒店)

评论

0赞 Timothy C. Quinn 2/15/2014
在断断续续地使用 Cygwin 多年后,我转向使用 ProcessExplorer 和内置的 Windows 7+ 资源监视器。我真的很喜欢两者,但发现 Process Monitor 是检查对文件 I/O 影响非常大的进程的绝佳工具。
0赞 Stephane Chazelas 9/24/2015
你如何使用或结束?他们有终端模式吗?PROCEXP.EXEPROCMON.EXEssh

答:

35赞 ak2 8/18/2010 #1

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

评论

1赞 philwalk 3/10/2015
以下链接显示一种方式:superuser.com/questions/751688/...
3赞 jonretting 12/9/2013 #2

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

评论

0赞 Stephane Chazelas 9/24/2015
谢谢。 以可解析的方式以秒为粒度处理 CPU 时间(自启动以来),因此可以以 100 秒的间隔运行两次,以大致了解最大的长时间运行的 CPU 使用进程。TASKLIST /FO CSV /NH
3赞 Stephane Chazelas 9/24/2015 #3

似乎你可以做这样的事情:

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 时间。

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