Ale*_*ern 5 linux shell ksh ps array
我正在用 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
Run Code Online (Sandbox Code Playgroud)
但它不能正常工作。
Mat*_*Mat 11
您应该将列输出减少ps到最少,即在此处仅请求用户名 - 这简化了进一步的处理。
例如:
$ ps -eo user=
Run Code Online (Sandbox Code Playgroud)
将打印所有当前正在运行的进程的所有者(=抑制标题)。
获取每个用户的计数的简单方法:
$ ps -eo user= | sort | uniq -c
1 dovecot
1 messagebus
1 mpd
1 polkitd
2 postfix
121 root
27 me
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据需要对其进行过滤:
$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root
Run Code Online (Sandbox Code Playgroud)
在变量中有限制:
$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |