Количество процессов, которые пользователь запускает, используя bash - PullRequest
11 голосов
/ 06 октября 2010

Хотелось бы узнать, как узнать количество процессов для каждого пользователя, который в данный момент вошел в систему.

Ответы [ 8 ]

13 голосов
/ 06 октября 2010

Вы можете попробовать несколько вариантов этого:

ps haux Ou | cut '-d ' -f1 | uniq -c

Он дает вам количество процессов для каждого пользователя (вошли или нет). Теперь вы можете отфильтровать эти результаты, используя вывод команды w или другой способ определения того, кто вошел в систему.

6 голосов
/ 06 октября 2010

Попробуйте:

ps -u "$(echo $(w -h | cut -d ' ' -f1 | sort -u))" o user= | sort | uniq -c | sort -rn

Чтобы правильно обрабатывать имена пользователей, которые могут быть длиннее восьми символов, используйте users вместо w.Последний усекает имена пользователей.

ps -u "$(echo $(printf '%s\n' $(users) | sort -u))" o user= | sort | uniq -c | sort -rn
3 голосов
/ 09 ноября 2016

Если вы когда-либо беспокоитесь о приближении к пределу пользовательского процесса, указанному ulimit -a, вы хотите получить ВСЕ процессы (включая LWP). В таком случае вы должны использовать:

ps h -Led -o user | sort | uniq -c | sort -n

На одной системе это делается:

ps haux Ou | cut '-d ' -f1 | uniq -c

выходы:

# ps haux Ou | cut '-d ' -f1 | uniq -c
 30 user1
  1 dbus
  3 user2
  1 ntp
  1 nut
  1 polkitd
  2 postfix
124 root
  2 serv-bu+

, где выполнение первого дает истинное число процессов:

# ps h -Led -o user | sort | uniq -c | sort -n
  1 ntp
  1 nut
  2 dbus
  2 postfix
  2 serv-builder
  3 user2
  6 polkitd
141 root
444 user1
3 голосов
/ 06 октября 2010
ps -u aboelnour | awk 'END {print NR}' 

покажет номер процесса, который пользователь aboelnour запускает

1 голос
/ 08 августа 2012

Если вам нужно просто подсчитать количество процессов, вы можете использовать procfs напрямую следующим образом: (требуется Linux 2.2 или выше)

вы можете использовать wc:

number_of_processes=`echo /proc/[0-9]* | wc -w`

или сделать это в чистом виде (без внешних команд), как это

procs=( /proc/[0-9]* ) 
number_of_proccesses=${#procs[*]}

Если вам нужен только текущий идентификатор пользователя

procs=( /proc/[0-9]*/fd/. ) 
number_of_proccesses=${#procs[*]}
0 голосов
/ 28 сентября 2016

Вот мое решение для Linux:

$ find / proc –user $ USER -maxdepth 1 -name '[0-9] *' |wc –l

Это решение не завершится ошибкой, если число процессов превышает предел командной строки.

0 голосов
/ 06 октября 2010
userlist=$(w|awk 'BEGIN{ORS=","}NR>2{print $1}'|sed 's/,$//' )
ps -u "$userlist"
0 голосов
/ 06 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...