我需要查看用户特定进程的计数。例如我做
ps -ef | grep apache
这列出了所有 apache 进程。现在我想要统计每个用户在 Linux 中运行的进程数。
我怎样才能得到这个。
答案1
简短的解决方案:
ps -eo "%U" --sort=user h | uniq -c
--sort=user
- 排序方式user name
uniq -c
- 计算每个唯一用户的进程数
答案2
一种解决方案:
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
:数字排序,出现次数最多的排在前面
答案3
尝试
ps -e -o user h| awk '{u[$1]++} END { for (user in u ) printf "%s:%d\n",user,u[user]}'
在哪里
-e
列出所有进程-o user
只输出用户h
不显示标题- awk 将计算用户数量,并在 ps 输出末尾显示计数。
编辑:可以(某种程度上)缩短为,感谢@Gohu。
ps -e -o user h| sort | uniq -c | sort -rg
答案4
POSIXly:
ps -Ao user= | sort | uniq -c | sort -rn