Linux 用ps对进程进行分组
我想通过geektools在我的桌面上使用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进程都是不同的进程,也
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
执行操作非常有效!