¿Hay alguna manera de mostrar los procesos de Windows en Cygwin constantemente

13

Me gustaría monitorear los procesos desde un shell cygwin, usando top o una variante. La razón de esto es su informe en tiempo real y sus constantes actualizaciones. Sin embargo, bajo cygwin, top no informará sobre los procesos de Windows.

Los foros que he recomendado recomendar ps -Wcomo alternativa, pero esto obviamente tiene el inconveniente de que ya no me da información en tiempo real, sino solo una instantánea estática cada vez que escribo el comando.

¿Hay alguna manera de toptrabajar en cygwin para mostrar todos mis procesos y no solo los procesos de cygwins?

Husman
fuente
1
¿Hay alguna razón por la que específicamente tenga que estar basado en Cygwin? Si solo desea algo que proporcione una lista detallada de datos sobre la ejecución de procesos de Windows en formato tabular (como top), intente Process Explorer
Darth Android

Respuestas:

12

Desde un shell bash, puede monitorear todos los procesos de Windows con esta línea de comando:

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

Para ver todos los procesos de Java, por ejemplo:

watch "ps -W | grep java"

Tenga en cuenta que "ps -W" enumera los procesos cygwin y no cygwin.

philwalk
fuente
Ya sea ps -Wo el ps --windowstrabajo, verps --help
Timo
1

Parece que puedes hacer algo como:

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

Los tiempos de modo Usuario y Kernel parecen expresarse en 1/10 000 000 de segundo.

Debería poder procesar posteriormente esa salida para obtener el uso de CPU por segundo.

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

Produce algo como:

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

cada segundo.

Tenga en cuenta que si el proceso de inactividad del sistema muestra poco menos del 800% en un sistema inactivo, es porque su sistema tiene 8 núcleos de CPU (al menos 8 hilos) ya que cuenta el tiempo de CPU de todas las CPU.

También tenga en cuenta que lo EVERY:1anterior es una mentira. wmicno parece dar esa salida cada segundo. Lo más probable es que duerma aproximadamente 1 segundo entre cada informe y no compensa el tiempo que lleva calcular el informe. Entonces, en la práctica, se ejecutará cada 1 segundo y un poco, lo que significa que esos porcentajes no son muy precisos y están ligeramente sobreestimados.

sch
fuente