用户使用bash运行的进程数

时间:2010-10-06 16:19:15

标签: linux bash scripting

我想知道如何获取当前登录的每个用户的进程数。

9 个答案:

答案 0 :(得分:13)

您可以尝试一些变体:

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

它为您提供每个用户(登录或不登录)的进程数。现在,您可以使用w命令的输出或其他确定登录方式的方式过滤这些结果。

答案 1 :(得分:6)

尝试一下:

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

答案 2 :(得分:3)

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

将显示用户aboelnour运行它的进程数

答案 3 :(得分:3)

如果您担心接近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

答案 4 :(得分:1)

如果您只想要一个进程计数,可以直接使用procfs,如下所示: (需要linux 2.2或更高版本)

你可以使用wc:

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

或者在纯粹的bash(没有外部命令)中这样做

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

如果您只想要当前的用户ID

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

答案 5 :(得分:1)

试试吧:

lslogins -o USER,PROC

答案 6 :(得分:0)

答案 7 :(得分:0)

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

答案 8 :(得分:0)

这是我的解决方案,适用于Linux:

$ find / proc -user $ USER -maxdepth 1 -name&#39; [0-9] *&#39; | wc -l <​​/ p>

当进程数大于命令行限制时,此解决方案不会失败。