如何在 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=] "%"}'
我接到一项任务,要打印每 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=] "%"}'