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