我想知道如何获取当前登录的每个用户的进程数。
答案 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)
以下链接包含有用的ps commands options,包括您的要求:
答案 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>
当进程数大于命令行限制时,此解决方案不会失败。