Cygwin(システムの下のtop
ライブラリの一部)でprocps
コマンドを使用してすべてのユーザーのプロセスを確認する方法を知っている人はいますか。
これは* nixで実行できることはわかっていますが、Cygwinで苦労しています。 pslist
を使用してみましたが、PuTTYSSHコンソールでは動作しません。
SSHを使用してtop
のようなダイアログを表示できるソリューションが必要です。 Win2k3ゲストへのNTLMSSOアクセスがまったくないため、sshが唯一の方法です。
top
はCygwinプロセスのみを表示します。 ps -W
はWindowsプロセスもリストします。
多くの場合、コマンド「tasklist」はジョブをより効果的に実行します。これはWindowsに組み込まれているため、System32フォルダーがbashプロファイルPATHの一部であることを確認してください。 procps自体もあります。また、端末にminttyを使用してみてください。これらのタスクアプリのいずれかを画面に添付したり、時計を使用して情報をポーリングしたりすることができます。
次のようなことができるようです。
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秒ごとに実行されます。つまり、これらのパーセンテージはあまり正確ではなく、わずかに過大評価されています。