Найдите всех пользователей, которые имеют больше, чем процессы N и повторяют их в оболочке

Вы передаете слишком мало байтов в каждом вызове к send или write. Необходимо попытаться передать по крайней мере 2 КБ за вызов, или лучше, 4 КБ за вызов. Если возможно, накопите все логическое сообщение и отправьте его сразу. Это будет сохранять системные вызовы, упаковывать Ваши пакеты более эффективно и препятствовать, задержал ACK уничтожить Вашу задержку.

5
20.03.2013, 00:55
1 ответ

Необходимо сократить объемы производства столбцов ps к минимуму, т.е. запросу только имя пользователя здесь - это упрощает последующую обработку.

Например:

$ ps -eo user=

распечатает владельца всех в настоящее время рабочих процессов (= подавляет заголовок).

Простой способ получить счета для каждого пользователя:

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

Можно затем отфильтровать это, как Вы желаете:

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

С пределом в переменной:

$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root
11
27.01.2020, 20:34
  • 1
    ! СПАСИБО!! –  Alex Zern 19.03.2013, 17:02
  • 2
    +1 можно также отсортировать вывод по числовому столбцу, убывающему путем передачи по каналу к sort -nrk 1 –  l0b0 19.03.2013, 18:08
  • 3
    @l0b0, sort -rn сделает то же как sort -rnk1, с тех пор -n игнорирует начальные пробелы так или иначе. –  Stéphane Chazelas 19.03.2013, 18:16

Теги

Похожие вопросы