已为我分配了每10秒使用'x%'或更多内存的打印过程。执行文件时,x%来自参数。
(例如,。/ processes.sh 8将每10秒使用8%或更多的内存来打印所有进程。)
我不知道如何按特定的内存参数对进程进行排序。我知道如何按升序或降序对流程进行排序,但不知道如何仅打印符合我条件的所选流程。这是我的代码段:
processes()
{
while :
do
date
echo "Processes occupying $1% of memory: "
ps -o pid,user,%mem ax|sort -n -b -k3 -r|pgrep -f1 "$1"
sleep 10
done
}
processes $1
我认为pgrep也许可以做到,但我认为我将其格式化错误,或者就是行不通。
理想情况下,输出应如下所示:
Processes occupying 8% or more memory:
11452 kelly1653 13.6%
93612 buckley0003 29.6%
对我有什么提示吗?我真的很沮丧预先感谢!
答案 0 :(得分:2)
这应该是您所需要的:
ps --no-headers -o pid,user,%mem |
awk -v "arg=$1" '$3 >= arg {print $0 "%"}' |
sort -nk 3
使用awk
选择具有第三个字段值或您的参数更大的行,并添加%
输出中缺少的ps
。然后根据第三个字段进行数字排序。
或使用ps
进行排序:
ps --no-headers -o pid,user,%mem --sort %mem |
awk -v "arg=$1" '$3 >= arg {print $0 "%"}'