Vidi
Vidi

Reputation: 205

The number of processes a user is running using bash

I would like to know how I could get the number of processes for each user that is currently logged in.

Upvotes: 15

Views: 25547

Answers (9)

david villa
david villa

Reputation: 384

Just try:

lslogins -o USER,PROC

Upvotes: 3

Dennis Williamson
Dennis Williamson

Reputation: 360105

Give this a try:

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

In order to properly handle usernames that may be longer than eight characters, use users instead of w. The latter truncates usernames.

ps -u "$(echo $(printf '%s\n' $(users) | sort -u))" o user= | sort | uniq -c | sort -rn

Upvotes: 6

JoeG
JoeG

Reputation: 7652

If you are ever concerned about nearing the user process limit shown by ulimit -a, the you want to get ALL the processes (including LWPs). In such a case you should use:

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

On one system doing this:

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

yields:

# 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+

where doing the former yields the true process count:

# 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

Upvotes: 3

Rick
Rick

Reputation: 71

Here is my solution, for Linux:

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

This solution will not fail when the number of processes is larger than the command line limit.

Upvotes: 0

Aboelnour
Aboelnour

Reputation: 1435

ps -u aboelnour | awk 'END {print NR}' 

will show number of process which user aboelnour running it

Upvotes: 3

user340140
user340140

Reputation: 678

If you just want a count of processes you can use procfs directly like this: (requires linux 2.2 or greater)

you can use wc:

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

or do it in pure bash (no external commands) like this

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

If you only want the current userid

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

Upvotes: 1

Naveed
Naveed

Reputation: 42093

Following links contain useful ps commands options including your requirements:

Upvotes: 0

ghostdog74
ghostdog74

Reputation: 342373

userlist=$(w|awk 'BEGIN{ORS=","}NR>2{print $1}'|sed 's/,$//' )
ps -u "$userlist"

Upvotes: 0

Helmut Grohne
Helmut Grohne

Reputation: 6778

You could try some variation of this:

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

It gives you the number of processes for each users (being logged in or not). Now you could filter those results using the output of the w command or another way of determining who is logged in.

Upvotes: 13

Related Questions