Как отфильтровать процессы по MEM% в Bash? - PullRequest
1 голос
/ 22 сентября 2019

Мне дали задание для процессов печати, которые используют 'x%' или больше памяти каждые 10 секунд.Значение x% будет получено из аргумента при выполнении файла.

(EG ./processes.sh 8 будет печатать все процессы, используя 8% или более памяти каждые 10 секунд.)

Я понятия не имею, как сортировать процессы по определенному параметру памяти.Я знаю, как сортировать процессы в порядке возрастания или убывания, но не умею печатать только выбранные процессы, которые соответствуют моим критериям.Вот фрагмент моего кода:

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 Ответ

2 голосов
/ 22 сентября 2019

Это должно быть все, что вам нужно:

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