查找所有拥有超过N个进程的用户并在shell中回显它们

查找所有拥有超过N个进程的用户并在shell中回显它们

我正在用 ksh 编写脚本。我需要找到所有拥有超过 N 个进程的用户并在 shell 中回显它们。 N 是从 ksh 读取的。

我知道我应该使用ps -elf,但是如何解析它,找到具有 >N 个进程的用户,并用它们创建一个数组?我在 ksh 中的数组方面遇到了一些问题。也许一个简单的解决方案可以帮助我,而不必创建一个数组。有一个人推荐我使用

ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3

但它不能正常工作。

答案1

您应该将输出的列减少ps到最少,即此处仅请求用户名 - 这可以简化进一步的处理。

例如:

$ ps -eo user=

将打印所有当前正在运行的进程的所有者(=抑制标题)。

获取每个用户计数的简单方法:

$ ps -eo user= | sort | uniq -c
  1 dovecot
  1 messagebus
  1 mpd
  1 polkitd
  2 postfix
121 root
 27 me

然后您可以根据需要进行过滤:

$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root

变量有限制:

$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root

相关内容