Lokalisieren einer Prozess-ID durch CPU-Auslastung (Ubuntu) mit AWK

Lokalisieren einer Prozess-ID durch CPU-Auslastung (Ubuntu) mit AWK

Ich habe einen Befehl, den ich ausführe, um zu versuchen, PIDs und ihre CPU-Auslastung aufzulisten. Ich verwende ps -ef.

Gibt es eine (bessere) Möglichkeit, dies mit zu tun top? Außerdem hatte ich eine Frage zu meiner awkAnweisung. Meine Variable $vGRPist ein regulärer Ausdruck. Wie teste ich, ob $2in ist ? Wenn ja, kann dies einen meiner Aufrufe $vGRPausschließen .grep

Ich habe dies ursprünglich als „Einzeiler“ geschrieben, den ich einfach in eine Terminalsitzung einfügen kann, also entschuldigen Sie bitte die Formatierung:

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

Idealerweise hätte ich gerne etwas Übersichtlicheres, bin damit aber nicht so vertraut bashund möchte, wenn möglich, awknach Feld 2 im String suchen .vGRP

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

Dies liefert jedoch keine Ausgabe, da ich davon ausgehe, dass awkkeine externen Variablen gelesen werden.

Antwort1

Offenbar das Rad neu erfinden.

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

verwandte Informationen