Como mostrar o tempo de CPU para processos via top sem procs 'root'

2

Ok, estou tentando fazer isso há cerca de três horas sem sucesso.

Como você pesquisa / exibe / usa o comando top (ou o comando ps se funciona ...) para gerar uma lista de todos os procs, ordenados pelo tempo de CPU Excluindo procs de propriedade de 'root'. / p>

Minhas tentativas até agora:

top -b -S -n 1 | grep -v root
top -b -S -n 1 | egrep -ve root

ps -eo pid,user,args,etime,time,%cpu --sort etime | egrep -v root

Isso e várias tentativas de executar top no modo batch, gerar um arquivo e tentar awk/grep/sort e classificá-lo corretamente pela quantidade de tempo de CPU (na maioria das vezes incapaz de encontrar a coluna certa / gerenciar classificar o direito coluna de qualquer maneira aparentemente útil).

Perdoe-me se isso parecer um pouco confuso; tl; dr:

Eu só quero uma maneira de ler facilmente o topo sem o root procs e ordenado pelo tempo de CPU.

    
por nom 20.02.2014 / 04:49

3 respostas

2

Seu comando ps deve funcionar se você classificá-lo corretamente. De man ps :

   --sort spec
          Specify sorting order.  Sorting syntax is
          [+|-]key[,[+|-]key[,...]].  Choose a multi-letter key from the
          STANDARD FORMAT SPECIFIERS section.  The "+" is optional since
          default direction is increasing numerical or lexicographic
          order.  Identical to k.  For example: ps jax --sort=uid,-ppid,
          +pid

Não sei ao certo que horas você deseja classificar, mas aqui estão as opções relevantes:

STANDARD FORMAT SPECIFIERS
   bsdtime     TIME      accumulated cpu time, user + system.  The display
                         format is usually "MMM:SS", but can be shifted to
                         the right if the process used more than 999
                         minutes of cpu time.

   cputime     TIME      cumulative CPU time, "[DD-]hh:mm:ss" format.
                         (alias time).
   etime       ELAPSED   elapsed time since the process was started, in
                         the form [[DD-]hh:]mm:ss.

   etimes      ELAPSED   elapsed time since the process was started, in
                         seconds.

Eu acho que da sua pergunta que você quer cputime . Em caso afirmativo, isso deve fornecer a saída desejada:

ps -eo pid,user,args,etime,time,%cpu --sort cputime | grep -v root
    
por 20.02.2014 / 16:42
6

Se você quiser simplesmente excluir um usuário de aparecer em top , poderá usar a opção -u . Não é óbvio no começo, mas se você entrar na página de manual de top , perceberá que essa opção também pode ser negada para atuar como uma lista de exclusão de usuários.

No entanto, você precisará verificar se tem uma versão apropriada de top que pode fazer isso:

$ top -version
  procps-ng version 3.3.8

trecho da página man do top

   -u | -U  :User-filter-mode as:  -u | -U number or name
        Display only processes with a user id or user name matching that 
        given.  The '-u' option matches on  effective user whereas  the  
        '-U' option matches on any user (real, effective, saved, or 
        filesystem).

        Prepending  an  exclamation  point ('!') to the user id or name 
        instucts top to display only processes with users not matching the 
        one provided.

Exemplo

No comando abaixo, estamos excluindo o usuário root . É importante que você escape do ponto de exclamação ( ! ) com uma barra ( \ ).

$ top -u\!root

    
por 20.02.2014 / 06:43
0

Olá, este comando funcionará para você

# top -b -n 1 | grep -ve root

Veja aqui minha saída deste comando

    
por 20.02.2014 / 06:18

Tags