4

我想通过 geektools 在我的桌面上使用 ps 来查看哪些进程正在使用什么。目前我的命令是:

ps -amcwwwxo "command %mem %cpu" | grep -v grep | head -13

问题在于,当我使用 chrome 时,“Google Chrome He”进程占据了 13 条显示线中的大部分。

有什么方法可以汇总所有同名进程的内存和cpu使用情况?通过 ps 或通过另一个命令对其进行管道传输。

4

4 回答 4

3

您可以使用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
)
于 2011-06-15T09:39:51.120 回答
1

寻找相同的,我想通了

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(总和)

我很高兴找到解决方案,只是想分享。

于 2012-06-04T01:35:04.803 回答
1

按命令行列出的顶级 cpu 组:

sudo ps aux | awk '{arr[$11]+=$3}; END {for (i in arr) {print arr[i],i}}' | sort -k1nr | head -n 10
于 2016-01-25T05:56:57.960 回答
0

它不存在,您应该编写自己的代码/命令/脚本来做到这一点。因为所有 Google Chrome Helper 进程都是不同的进程,所以也许您可以编写一个脚本,使用父进程 ID 计算所有 Chrome 进程(帮助程序、插件主机等)。

于 2011-06-14T19:04:45.713 回答