如何在Bash中按MEM%筛选进程?

时间:2019-09-22 18:45:38

标签: bash ps

已为我分配了每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%

对我有什么提示吗?我真的很沮丧预先感谢!

1 个答案:

答案 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 "%"}'