Gibt es eine Möglichkeit, Windows-Prozesse in Cygwin ständig anzuzeigen?


13

Ich möchte Prozesse von einer Cygwin-Shell aus mit top oder einer Variante überwachen. Der Grund dafür ist das Echtzeit-Reporting und die ständigen Aktualisierungen. Unter Cygwin berichtet top jedoch nicht über Windows-Prozesse.

Die Foren, die ich ps -Wals Alternative empfohlen habe , haben natürlich den Nachteil, dass ich keine Echtzeitinformationen mehr erhalte, sondern nur noch eine statische Momentaufnahme, wenn ich den Befehl eingebe.

Gibt es eine Möglichkeit, topin cygwin zu arbeiten, um alle meine Prozesse und nicht nur die cygwins-Prozesse anzuzeigen?


1
Gibt es einen Grund, warum es speziell in Cygwin angesiedelt sein muss? Wenn Sie nur eine detaillierte Liste der Daten zum Ausführen von Windows-Prozessen in einem Tabellenformat (z. B. top) benötigen, versuchen Sie Process Explorer
Darth Android

Antworten:


12

Über eine Bash-Shell können Sie alle Windows-Prozesse mit dieser Befehlszeile überwachen:

watch "ps -W" # pipe to grep for filtering

So zeigen Sie beispielsweise alle Java-Prozesse an:

watch "ps -W | grep java"

Beachten Sie, dass "ps -W" sowohl Cygwin- als auch Nicht-Cygwin-Prozesse auflistet.


Entweder ps -Woder ps --windowsarbeiten, sieheps --help
Timo


1

Es scheint, dass Sie etwas tun können wie:

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

Die Benutzer- und Kernelmoduszeiten dort scheinen in 1 / 10.000.000stel Sekunden ausgedrückt zu sein.

Sie sollten in der Lage sein, diese Ausgabe nachzubearbeiten, um die CPU-Auslastung pro Sekunde zu ermitteln.

Hier mit cygwin's 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 ""
    }'

Gibt so etwas aus wie:

0       System Idle Process     588.12377
2196    sh.exe  107.00075
248     svchost.exe     85.80055
7140    explorer.exe    26.52017
[...]

jede Sekunde.

Beachten Sie, dass, wenn der System-Leerlaufprozess auf einem Leerlaufsystem knapp 800% anzeigt, dies daran liegt, dass Ihr System über 8 CPU-Kerne verfügt (mindestens 8 Threads), da dies die CPU-Zeit aller CPUs zählt.

Beachten Sie auch, dass das EVERY:1oben Genannte eine Lüge ist. wmicscheint diese Ausgabe nicht jede Sekunde zu geben. Wahrscheinlicher ist, dass zwischen den einzelnen Berichten ungefähr 1 Sekunde vergeht und die für die Berechnung des Berichts erforderliche Zeit nicht kompensiert wird. In der Praxis läuft es also alle 1 Sekunde und ein bisschen, was bedeutet, dass diese Prozentsätze nicht sehr genau sind und leicht überschätzt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.