Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用ps对进程进行分组_Linux_Macos_Bash_Unix_Ps - Fatal编程技术网

Linux 用ps对进程进行分组

Linux 用ps对进程进行分组,linux,macos,bash,unix,ps,Linux,Macos,Bash,Unix,Ps,我想通过geektools在我的桌面上使用ps来查看哪些进程正在使用什么。 目前我的命令是: ps-amcwwxo“command%mem%cpu”| grep-v grep | head-13 问题是,当我使用chrome时,“GoogleChromeHe”占据了13条显示线中的大部分 有没有办法将所有同名进程的mem和cpu使用率相加?通过ps或通过另一个命令将其管道化。它不存在,您应该编写自己的代码/命令/脚本来完成它。因为所有Google Chrome Helper进程都是不同的进程,也

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

ps-amcwwxo“command%mem%cpu”| grep-v grep | head-13

问题是,当我使用chrome时,“GoogleChromeHe”占据了13条显示线中的大部分


有没有办法将所有同名进程的mem和cpu使用率相加?通过ps或通过另一个命令将其管道化。

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

您可以使用
awk
排序的组合:

(
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
)
(
printf“%-20s%-8s%-8s\n”命令“%MEM”%CPU
/bin/ps-amcwwxo“命令%mem%cpu”|
/usr/bin/awk-F“
开始{
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
}
结束{

对于(i=2;i寻找相同的,我发现了这个

ps aux | awk '{arr[$1]+=$4}; END {for (i in arr) {print i,arr[i]}}' | sort -k2
要打印按mem排序、按用户分组(第1列,即$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

简单而智能的脚本在Ubuntu 16.04上从ZSH执行上述命令时,我遇到了以下错误
错误:必须将personality设置为get-x选项
。解决方案是删除
-
作为
ps
参数。使用
/bin/ps amcwwxo
执行操作非常有效!