
Я могу применить нужные мне фильтры в интерактивном режиме (нажав o). Есть ли способ получить их в пакетном режиме.
Я использую procps-ng версии 3.3.10. Спасибо.
решение1
В соответствии сстраница руководства, -p
параметр командной строки может использоваться для ограничения того, какие процессы top
читают. Похоже, он не позволяет фильтровать точно так же, как в интерактивном режиме, но вы можете достичь по сути того же результата, изучив вывод ps
.
Пример, берущий только процессы с более чем тремя потоками:
$ ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print $2; } }' | sort -u
На моем компьютере эта команда выводит список всех соответствующих процессов, по одному в каждой строке. ps
генерирует список сведений о процессе, awk
команда фильтрует их и sort
просто удаляет дубликаты.
Для вашего использования проверьте, какие столбцы ps
вам понадобятся. На моем компьютере число потоков («NLWP») — это шестой столбец ( $6
), а идентификатор процесса («PID») — второй столбец ( $2
). Измените их в awk
команде по мере необходимости, чтобы они соответствовали нужному вам фильтру. Обратите внимание, что $6
появляется дважды: первый раз, чтобы убедиться, что это число, а не заголовок, и второй раз, чтобы убедиться, что оно больше 3.
После запуска этой команды идентификаторы процессов должны быть переданы top
. Bash и, вероятно, другие оболочки позволяют передавать вывод программы в качестве аргументов другой программе, поэтому конечная команда может быть
$ top $(ps -eLf | awk '$6 ~ /^[0-9]+$/ { if ($6 > 3) { print "-p"$2; } }' | sort -u) ... And other options
"-p"
добавлено для того, чтобы вывод работал с top
. При необходимости настройте эту команду в соответствии с вашим фильтром и оболочкой, вставьте ее в пакет, и она должна работать.
Примечание: добавление большего количества фильтров, вероятно, потребует изучения awk. Это не слишком сложно.