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 awk
Anweisung. Meine Variable $vGRP
ist ein regulärer Ausdruck. Wie teste ich, ob $2
in ist ? Wenn ja, kann dies einen meiner Aufrufe $vGRP
ausschließ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 bash
und möchte, wenn möglich, awk
nach 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 awk
keine externen Variablen gelesen werden.
Antwort1
Offenbar das Rad neu erfinden.
ps -o pid,pcpu -p $(pgrep "$vPNAME")