C'è un modo per mostrare costantemente i processi di Windows in Cygwin


13

Vorrei monitorare i processi da una shell Cygwin, usando top o una variante. La ragione di ciò sono i rapporti in tempo reale e gli aggiornamenti costanti. Comunque sotto cygwin, top non riporterà sui processi di Windows.

I forum che ho raccomandato di utilizzare ps -Win alternativa, ma questo ovviamente hanno lo svantaggio di non darmi più informazioni in tempo reale, ma solo un'istantanea statica ogni volta che digito il comando.

Esiste un modo per toplavorare in Cygwin per visualizzare tutti i miei processi e non solo i processi Cygwins?


1
C'è un motivo per cui deve essere basato specificamente in Cygwin? Se vuoi solo qualcosa che fornisca un elenco dettagliato di dati sull'esecuzione dei processi di Windows in un formato tabulare (come top), prova Process Explorer
Darth Android

Risposte:


12

Da una shell bash, è possibile monitorare tutti i processi di Windows con questa riga di comando:

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

Per vedere tutti i processi Java, ad esempio:

watch "ps -W | grep java"

Notare che "ps -W" elenca i processi sia cygwin che non cygwin.


O ps -Wo ps --windowslavoro, vedips --help
Timo


1

Sembra che tu possa fare qualcosa del tipo:

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

I tempi in modalità utente e kernel sembrano essere espressi in 1 / 10.000.000 di secondo.

Dovresti essere in grado di post-elaborare quell'output per ottenere l'utilizzo della CPU al secondo.

Qui usando 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 ""
    }'

Emette qualcosa del tipo:

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

ogni secondo.

Si noti che se il processo di inattività del sistema mostra poco meno dell'800% su un sistema inattivo, ciò è dovuto al fatto che il sistema dispone di 8 core della CPU (ben almeno 8 thread) poiché ciò conta il tempo della CPU di tutte le CPU.

Si noti inoltre che quanto EVERY:1sopra è una bugia. wmicnon sembra dare quell'output ogni secondo. È più probabile che trascorra circa 1 secondo tra ciascun rapporto e non compensa il tempo necessario per calcolare il rapporto. Quindi, in pratica, verrà eseguito ogni 1 secondo e un po ', il che significa che tali percentuali non sono molto precise e leggermente sopravvalutate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.