web-dev-qa-db-ja.com

Cygwintopコマンド-すべてのユーザーのプロセスを表示

Cygwin(システムの下のtopライブラリの一部)でprocpsコマンドを使用してすべてのユーザーのプロセスを確認する方法を知っている人はいますか。

これは* nixで実行できることはわかっていますが、Cygwinで苦労しています。 pslistを使用してみましたが、PuTTYSSHコンソールでは動作しません。

SSHを使用してtopのようなダイアログを表示できるソリューションが必要です。 Win2k3ゲストへのNTLMSSOアクセスがまったくないため、sshが唯一の方法です。

25

topはCygwinプロセスのみを表示します。 ps -WはWindowsプロセスもリストします。

33
ak2

多くの場合、コマンド「tasklist」はジョブをより効果的に実行します。これはWindowsに組み込まれているため、System32フォルダーがbashプロファイルPATHの一部であることを確認してください。 procps自体もあります。また、端末にminttyを使用してみてください。これらのタスクアプリのいずれかを画面に添付したり、時計を使用して情報をポーリングしたりすることができます。

3
jonretting

次のようなことができるようです。

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

ユーザーモードとカーネルモードの時間は、1/10,000,000分の1秒で表されているようです。

その出力を後処理して、1秒あたりの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%をわずかに下回る場合は、すべてのCPUのCPU時間をカウントするため、システムに8つのCPUコア(少なくとも8つのスレッド)があるためです。

また、EVERY:1上記は嘘です。 wmicは毎秒その出力を提供していないようです。多くの場合、各レポート間で約1秒間スリープし、レポートの計算にかかる時間を補正しません。したがって、実際には、1秒ごとに実行されます。つまり、これらのパーセンテージはあまり正確ではなく、わずかに過大評価されています。

3