Ich führe einen Prozess aus und zähle die Anzahl der Threads mit
ps huH p <PID_OF_U_PROCESS> | wc -l
watch
Ich kann diesen Thread so ausführen :
watch -n 1 ps huH p <PID_OF_U_PROCESS> | wc -l
Dadurch wird die Anzahl der Threads ausgegeben, die der Prozess ausführt. Normalerweise ändert sich diese Zahl jedoch nicht.
Wie kann ich die neue Nummer nur dann auf dem Bildschirm ausgeben, wenn sie sich seit der letzten Ausführung des Befehls geändert hat?
Zum Beispiel:
64 65 64
(ein paar Minuten vergehen)
65
Usw.
Antwort1
Sie können einfach weiterleiten an uniq
:
while ps -o nlwp= -p "$pid"; do sleep 1; done | uniq
Antwort2
watch
ist dazu nicht in der Lage. Obwohl Sie Unterschiede in der Befehlsausgabe hervorheben (über die Option -d
) oder beenden können, wenn sich die Ausgabe ändert (über die Option -g
), ist es nicht möglich, die Ausgabe mehrerer Durchläufe anzuzeigen. Dies können Sie jedoch über andere gängige Tools erreichen.
Eine von vielen möglichen Lösungen:
last=""; while true; do cur="$(ps h -o nlwp -p <PID>)"; if ! [ "$cur" = "$last" ]; then last="$cur"; echo "$(date) $cur"; fi; sleep 1; done
Oder besser lesbar:
last=""
while true
do
cur="$(ps h -o nlwp -p <PID>)"
if ! [ "$cur" = "$last" ]
then
last="$cur"
echo "$(date) $cur"
fi
sleep 1
done
Erklärung: Die ps
Option -o nlwp
gibt direkt die Anzahl der Threads aus, sodass Sie nicht aufrufen müssen wc -l
. Sie können auch $(pidof programname)
anstelle von verwenden <PID>
, um die Prozess-ID automatisch zu ermitteln. Ich habe auch das aktuelle Datum über hinzugefügt, $(date)
was mir nützlich erscheint. Wenn es Ihnen nicht gefällt, entfernen Sie es einfach.