如何在 Bash 中按 MEMORY% 过滤进程?

How to filter processes by MEM% in Bash?

我接到一项任务,要打印每 10 秒使用 'x%' 或更多内存的进程。 x% 将来自执行文件时的参数。

(例如 ./processes.sh 8 将每 10 秒打印使用 8% 或更多内存的所有进程。)

我不知道如何根据特定内存参数对进程进行排序。我知道如何按升序或降序对进程进行排序,只是不知道如何只打印满足我的条件的 select 进程。这是我的代码片段:

processes()
{
while :
do
        date
        echo "Processes occupying % of memory: "
        ps -o pid,user,%mem ax|sort -n -b -k3 -r|pgrep -f1 ""
        sleep 10
done
}

processes 

我认为 pgrep 可能可以做到,但我想我要么格式不对,要么根本不起作用。

理想情况下,输出应如下所示:

Processes occupying 8% or more memory:
11452 kelly1653 13.6%
93612 buckley0003 29.6%

对我有什么提示吗?我真的很沮丧。提前致谢!

这应该是您所需要的:

ps --no-headers -o pid,user,%mem |
    awk -v "arg=" ' >= arg {print [=10=] "%"}' |
    sort -nk 3

使用 awk 到 select 具有您的参数或更多字段值的行,并添加 ps 输出中缺少的 %。然后根据第三个字段进行数值排序。

或使用 ps 进行排序:

ps --no-headers -o pid,user,%mem --sort %mem |
    awk -v "arg=" ' >= arg {print [=11=] "%"}'