Как получить количество определенных процессов с помощью команды ps, а затем отсортировать и подсчитать их по пользователям

Мне нужно увидеть количество конкретных процессов по пользователям. Например, я делаю

ps -ef | grep apache

здесь перечислены все процессы apache. Теперь мне нужен подсчет количества процессов, запущенных каждым пользователем в Linux.

как я могу получить это.

0
22.06.2017, 16:58
4 ответа

попробуйте

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

где

  • -e список всех процессов
  • -o пользователь только вывод пользователя
  • h не отображать заголовок
  • awk будет считать пользователя, и отобразить количество в конце вывода ps.

РЕДАКТИРОВАТЬ: можно (вроде) сократить до, спасибо @Gohu.

ps -e -o user h| sort | uniq -c | sort -rg
0
28.01.2020, 02:33

Краткое решение:

ps -eo "%U" --sort=user h | uniq -c

  • --sort=user - сортировать по имени пользователя

  • uniq -c - подсчитывать количество процессов для каждого уникального пользователя

1
28.01.2020, 02:33

Одно решение:

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

С:

  • ps -ef: список процессов с пользователем в качестве первого элемента строки
  • grep -v '^UID ' : удалить строку заголовка
  • awk '{print $1}' : захватить первый элемент строки (пользователь)
  • sort: нам нужно отсортировать перед запуском uniq - c
  • uniq -c: объединить повторяющиеся строки и подсчитать вхождения
  • sort -rg: числовая сортировка, большинство вхождений сначала
1
28.01.2020, 02:33

POSIXly:

ps -Ao user= | sort | uniq -c | sort -rn
0
28.01.2020, 02:33

Теги

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