Como obter uma contagem de processos específicos usando o comando ps e, em seguida, classifique nd count it user wise

0

Eu preciso ver a contagem do processo específico no sentido horário. Por exemplo eu faço

ps -ef | grep apache

isso lista todos os processos do apache. Agora quero contar quantos processos cada usuário está executando no Linux.

como posso conseguir isso?

    
por sap 22.06.2017 / 15:54

4 respostas

1

Solução resumida:

ps -eo "%U" --sort=user h | uniq -c
  • --sort=user - classificar por user name

  • uniq -c - conta o número de processos para cada usuário único

por 22.06.2017 / 16:21
1

Uma solução:

gohu@Luna:~$ ps -ef | grep -v '^UID' | awk '{print $1}' | sort | uniq -c | sort -rg
    151 gohu
    149 root
      2 nobody
      2 avahi
      1 syslog
      1 rtkit
      1 ntp
      1 message+
      1 daemon
      1 colord

Com:

  • ps -ef : lista processos, com usuário como primeiro elemento da linha
  • grep -v '^UID' : remover linha de cabeçalho
  • awk '{print $1}' : pegue primeiro elemento da linha (o usuário)
  • sort : precisamos classificar antes de executar uniq -c
  • uniq -c : mesclar linhas duplicadas e contar ocorrências
  • sort -rg : classificação numérica, a maioria das ocorrências primeiro
por 22.06.2017 / 16:06
0

tente

ps -e -o user h| awk '{u[$1]++} END { for (user in u ) printf "%s:%d\n",user,u[user]}'

onde

  • -e listar todo o processo
  • -o user apenas usuário de saída
  • h não exibe o cabeçalho
  • o awk contará o usuário e exibirá a contagem no final da saída do ps.

EDIT: pode ser (mais ou menos) reduzido, graças a @Gohu.

ps -e -o user h| sort | uniq -c | sort -rg
    
por 22.06.2017 / 16:03
0

POSIXly:

ps -Ao user= | sort | uniq -c | sort -rn
    
por 22.06.2017 / 16:34