Existe uma maneira de mostrar constantemente os processos do Windows no Cygwin?

12

Eu gostaria de monitorar processos de um shell cygwin, usando top ou variant. A razão para isso é seu relatório em tempo real e atualizações constantes. No entanto, no cygwin, o top não relatará os processos do Windows.

Teh fóruns tenho sido recomendado usando ps -W como uma alternativa, mas isso obviamente tem a desvantagem de não mais me dar informações em tempo real, mas apenas um instantâneo estático sempre que eu digito o comando.

Existe alguma maneira de fazer com que top trabalhe no cygwin para exibir todos os meus processos e não apenas os processos do cygwins?

    
por Husman 09.05.2014 / 18:18

3 respostas

11

De um shell bash, você pode monitorar todos os processos do Windows com esta linha de comando:

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

Para ver todos os processos java, por exemplo:

watch "ps -W | grep java"

Note que "ps -W" lista os processos cygwin e não-cygwin.

    
por 09.03.2015 / 23:03
2

Você tem que instalar a biblioteca de procps para o cygwin, isso inclui o programa principal, no entanto, isso listará apenas os processos em execução no cygwin. Se você quiser ver todos os processos em execução no Windows, consulte esta resposta: link

    
por 09.05.2014 / 19:02
0

Parece que você pode fazer algo como:

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

As horas do modo Usuário e Kernel parecem estar expressas em 1 / 10.000.000 de segundo.

Você deve conseguir pós-processar essa saída para obter o uso da CPU por segundo.

Aqui usando o perl :

do cygwin
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 ""
    }'

Exibe algo como:

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

a cada segundo.

Note que se o System Idle Process mostrar menos de 800% em um sistema ocioso, isso acontece porque o seu sistema tem 8 núcleos de CPU (pelo menos 8 threads), já que conta o tempo de CPU de todos CPUs.

Observe também que EVERY:1 acima é uma mentira. wmic não parece dar essa saída a cada segundo. Mais provavelmente, ele dorme aproximadamente 1 segundo entre cada relatório e não compensa o tempo que leva para computar o relatório. Então, na prática, ele será executado a cada 1 segundo e um pouco, o que significa que essas porcentagens não são muito precisas e ligeiramente superestimadas.

    
por 24.09.2015 / 11:36