Encontre todos os usuários que têm mais de N processos e os ecoa no shell

5

Estou escrevendo um script em ksh. Eu preciso encontrar todos os usuários que têm mais de N processos e echo-los no shell. N é lido do ksh.

Eu sei que devo usar ps -elf , mas como posso analisá-lo, encontrar usuários com processos > N e criar um array com eles? Eu estou tendo um pequeno problema com matrizes em ksh. Talvez uma solução simples possa me ajudar em vez de ter que criar uma matriz. Uma pessoa recomendou que eu usasse

ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3

mas não funciona corretamente.

    
por Alex Zern 19.03.2013 / 14:57

1 resposta

11

Você deve reduzir as colunas produzidas por ps ao mínimo, ou seja, solicitar apenas o nome de usuário aqui - isso simplifica o processamento adicional.

Por exemplo:

$ ps -eo user=

imprimirá o proprietário de todos os processos atualmente em execução ( = suprime o cabeçalho).

Uma maneira fácil de obter as contagens de cada usuário:

$ ps -eo user= | sort | uniq -c
  1 dovecot
  1 messagebus
  1 mpd
  1 polkitd
  2 postfix
121 root
 27 me

Você pode filtrar como desejar:

$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root

Com um limite em uma variável:

$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root
    
por 19.03.2013 / 15:10