Localizando um ID de processo por uso de CPU (Ubuntu) usando AWK

Localizando um ID de processo por uso de CPU (Ubuntu) usando AWK

Eu tenho um comando que executo para tentar listar os PIDs e seu uso de CPU. Estou usando ps -ef.

Existe uma maneira (melhor) de fazer isso usando top? Além disso, eu tinha uma pergunta sobre minha awkdeclaração. Minha variável $vGRPé uma expressão regular. Como faço para testar se $2está dentro $vGRP? Nesse caso, isso pode interromper uma das minhas grepligações.

Inicialmente escrevi isso como uma "linha única" que posso simplesmente colar em uma sessão de terminal, então, perdoe a formatação:

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="";

Idealmente, eu gostaria de algo um pouco mais limpo, mas não estou tão familiarizado bashe quero awkverificar o campo 2 na string, vGRPse possível.

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

No entanto, isso não fornece saída porque presumo que awknão lê variáveis ​​externas.

Responder1

Aparentemente reinventando a roda.

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

informação relacionada