Existe uma maneira de executar o “top” exatamente uma vez e sair?

11

Eu acho que a saída do comando shell top é uma maneira simples e familiar de ter uma idéia aproximada da integridade de uma máquina. Gostaria de exibir a saída de top (ou algo muito semelhante a ela) de um pequeno servidor da Web em uma máquina para fins de monitoramento bruto.

Existe uma maneira de fazer com que o topo grave sua saída textual exatamente uma vez , sem formatar caracteres? Eu tentei isso:

(sleep 1; echo 'q') | top > output.txt

Isso parece próximo do que eu quero, exceto que (1) não há garantia de que não receberei mais ou menos de uma tela cheia de informações e (2) tenho que me despir todos os caracteres de formatação do terminal.

Ou existe algum outro comando top -like que relacione as informações de memória em todo o computador e em nível de processo / uso da CPU / tempo de atividade?

(Idealmente, adoraria uma estratégia que fosse portável tanto para Linux quanto para Mac OS X, já que nossos desenvolvedores usam Macs e nosso ambiente prod é Linux.)

    
por Mickalot 30.07.2014 / 18:31

2 respostas

19

No Linux, você pode tentar isto:

top -bn1 > output.txt

De man top :

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

Com o OS X, tente:

top -l 1

De página principal do OSX :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.
    
por 30.07.2014 / 18:34
1

Para obter números de tipo semelhantes de um sistema Windows, você deve dar uma olhada no powershell.

Apenas para obter uma lista de processos você e veja get-process . Dê uma olhada nesta referência .

Ao fazer mais pesquisas, encontrei um pequeno comando aqui .

Se você retirar o loop while, suas necessidades seriam:

ps | sort -desc cpu | select -first 30

ps no powershell é um alias para get-process .

    
por 30.07.2014 / 20:59