如何使用 ps 命令获取特定进程的数量,然后按用户进行排序和计数

如何使用 ps 命令获取特定进程的数量,然后按用户进行排序和计数

我需要查看用户特定进程的计数。例如我做

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

相关内容