使用ps命令进行进程分组

4
我想通过geektools在我的桌面上使用ps命令查看哪些进程正在运行。当前的命令是:
``` ps -amcwwwxo "command %mem %cpu" | grep -v grep | head -13 ```
问题在于,由于我正在使用Chrome浏览器,进程"Google Chrome He"占据了13个显示行中的大部分。有没有办法将相同名称的所有进程的内存和CPU使用情况加在一起?可以通过ps或将其传递到另一个命令来完成。
4个回答

4

我正在寻找相同的东西,我找到了这个。

ps aux | awk '{arr[$1]+=$4}; END {for (i in arr) {print i,arr[i]}}' | sort -k2

要按照内存排序,按用户分组打印进程(第一列,$1),您可以按其他内容分组,并求和其他内容,更改 $1 和 $4

  • $1 是第一列:用户名(按此分组)
  • $ 4 是第四列:%内存(总和为此)

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


非常好的命令,谢谢!但是我们如何按计数分组呢? - postgresnewbie

3
您可以使用awksort的组合来实现:
(
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
)

在Ubuntu 16.04上从ZSH执行以上命令时,我遇到了以下错误“error: must set personality to get -x option”。解决方法是将“ps”参数中的“-”删除。使用“/bin/ps amcwwwxo”执行完美运行! - Mandy Schoep

2

按命令行分组的 top CPU:

sudo ps aux | awk '{arr[$11]+=$3}; END {for (i in arr) {print arr[i],i}}' | sort -k1nr | head -n 10

简单智能的脚本 - ashah

0

并不存在该功能,您应该编写自己的代码/命令/脚本来实现。因为所有的Google Chrome助手进程都是独立的进程,也许您可以编写一个脚本,使用父进程ID计算所有Chrome进程(助手、插件主机等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接