如何解决用ps进行分组处理
| 我想通过geektools在桌面上使用ps来查看哪些进程正在使用什么。 目前,我的命令是:ps -amcwwwxo \"command %mem %cpu\" | grep -v grep | head -13
问题在于,当我使用chrome时,“ Google Chrome He \”过程占据了13条显示行的大部分。
有什么办法可以将所有同名进程的mem和cpu用法汇总在一起?通过ps或通过另一个命令通过管道传递。
解决方法
您可以结合使用
awk
和sort
:
(
printf \"%-20s %-8s %-8s\\n\" \"COMMAND\" \"%MEM\" \"%CPU\"
/bin/ps -amcwwwxo \"command %mem %cpu\" |
/usr/bin/awk -F\" \" \'
BEGIN {
idx=0
format=\"%-20s /%-8s/ %-8s\\n\"
}
{
idx = idx + 1
col1=$0
col2=$(NF-1)
col3=$NF
sub(/[[:space:]]+[^ ]+[[:space:]]+[^ ]+[[:space:]]*$/,\"\",col1)
a[idx]=col1
b[col1]+=col2
c[col1]+=col3
}
END {
for(i=2; i<=idx; i++)
{
if (a[i] in b)
{
printf format,a[i],b[a[i]],c[a[i]]
delete b[a[i]]
}
}
}
\' |
/usr/bin/sort -rn -t \'/\' -k 2,2 | /usr/bin/tr -d \'/\' | /usr/bin/head -n 15
)
, 寻找相同,我想通了
ps aux | awk \'{arr[$1]+=$4}; END {for (i in arr) {print i,arr[i]}}\' | sort -k2
要打印按mem排序的进程(按用户分组(column1,$ 1)),您可以按其他内容进行分组,并对其他内容求和,更改$ 1和$ 4
$ 1是第一列:用户名(按此分组)
$ 4是第四列:%mem(加起来)
我很高兴找到解决方案,只想分享。
, 顶级cpu按命令行分组:
sudo ps aux | awk \'{arr[$11]+=$3}; END {for (i in arr) {print arr[i],i}}\' | sort -k1nr | head -n 10
, 它不存在,您应该编写自己的代码/命令/脚本来执行此操作。由于所有Google Chrome Helper进程都是不同的进程,因此也许您可以编写一个脚本来使用父进程ID计算所有Chrome进程(助手,插件主机等)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。