У меня есть команда, которую я запускаю, чтобы попытаться получить список 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
не читает внешние переменные.
Видимо, изобретают велосипед.
ps -o pid,pcpu -p $(pgrep "$vPNAME")