Solução resumida:
ps -eo "%U" --sort=user h | uniq -c
-
--sort=user- classificar poruser name -
uniq -c- conta o número de processos para cada usuário único
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?
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
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 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 EDIT: pode ser (mais ou menos) reduzido, graças a @Gohu.
ps -e -o user h| sort | uniq -c | sort -rg
POSIXly:
ps -Ao user= | sort | uniq -c | sort -rn