Определение идентификатора процесса по использованию ЦП (Ubuntu) с помощью AWK

Определение идентификатора процесса по использованию ЦП (Ubuntu) с помощью AWK

У меня есть команда, которую я запускаю, чтобы попытаться получить список PID и их использование ЦП. Я использую ps -ef.

Есть ли (лучший) способ сделать это с помощью top? Кроме того, у меня возник вопрос по моему awkоператору. Моя переменная $vGRP— это регулярное выражение. Как мне проверить, $2находится ли она в $vGRP? Если да, то это может вырезать один из моих grepвызовов.

Изначально я написал это как «однострочный» текст, который можно просто вставить в сеанс терминала, поэтому, пожалуйста, простите за форматирование:

clear;
printf "Please enter process name: "; read vPNAME;
for i in $(pgrep "$vPNAME");
  do vGRP="$vGRP$i|";
done;
vGRP="${vGRP::-1}";
printf "Seaching for processes: $vGRP\n  PID\tUSAGE\n-------\t-------\n";
ps -ef | egrep "$vGRP" | egrep "$vPNAME" | awk '{print $2, "\t", $4 }';
vGRP=""; vPNAME="";

В идеале мне бы хотелось что-то более чистое, но я не настолько хорошо разбираюсь в этом bashи хочу awkпроверить наличие поля 2 в строке, vGRPесли это возможно.

ps -ef | awk -v vGRP="$vGRP" '$vGRP~/$2/ {print $2, "\t", $4 }';

Однако это не обеспечивает вывода, поскольку я предполагаю, что awkвнешние переменные не считываются.

решение1

Видимо, изобретают велосипед.

ps -o pid,pcpu -p $(pgrep "$vPNAME")

Связанный контент