Ich überwache mehrere Prozesse mit zB '#top -p 22055,21995' Aber es gibt viele von ihnen, die alle mit fwk* beginnen, zB fwk3_dev, fwk5_dev
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22055 admin 0 -20 832m 302m 41m S 20 2.5 14973:53 fwk3_dev
21995 admin 0 -20 834m 304m 41m S 14 2.6 10179:55 fwk5_dev
Wie kann ich mithilfe des regulären Ausdrucks den Namen des Prozesses fwk* überwachen, ich meine alle Prozesse, die mit „fwk“ beginnen?
Antwort1
top
wird dies nicht von selbst tun, aber Sie könnten ein einfaches Shell-Skript schreiben, das top
im Batch-Modus (die -b
Option) ausgeführt wird und filtertDasmit grep und in einer Schleife. Es wäre nicht interaktiv.
Zum Beispiel
while :; do clear; top -b -n 1 |grep ' fwk' ;sleep 1; done
grep
erkennt reguläre Ausdrücke, wenn die -E
Option vorhanden ist. Aber Ihr Beispiel kann mit nur einem führenden Leerzeichen und „fwk“ behandelt werden (es sei denn, Sie haben zufällig einen Benutzer mit demselben Namen).
Einige Versionen vontop
Möglicherweise ist eine andere Option (z. B. -d
) erforderlich, um nur einmal im Batchmodus ausgeführt zu werden.
Antwort2
# first generate a comma-separated list of matching PIDs
pids=$(ps a -o pid,args | awk '/[f]wk/ {print $1}' | xargs | sed -e 's/ /,/g')
# then run top with that list
top -p $pids
HINWEIS: Wenn fwk*
in der kurzen Zeit zwischen dem Erstellen der Liste und dem Ausführen Prozesse gestartet werden top
, werden diese nicht in die Anzeige aufgenommen.