Ich habe versucht, es zu googeln, aber ich kann es nicht finden. Ich suche nach:
Anzahl der Threads in Prozess X
Gesamtzahl der aktuell laufenden Threads
Ich habe versucht, es zu googeln, aber ich kann es nicht finden. Ich suche nach:
Anzahl der Threads in Prozess X
Gesamtzahl der aktuell laufenden Threads
Antworten:
So ermitteln Sie die Anzahl der Threads für eine bestimmte PID:
ps -o nlwp <pid>
Um die Summe aller im System laufenden Threads zu erhalten:
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps -o nlwp <pid>
gibt NLWP zurück :), was bedeutet das?
ps h -o nlwp $pid
Ich stütze mich auf diese Antwort ps axms
. ps
ist ein großartiges Tool, um aufzulisten, was gerade läuft.
Wenn Sie das nach einem Prozess filtern möchten, können Sie Folgendes versuchen:
echo $(( `ps axms | grep firefox | wc -l` - 1))
Wir subtrahieren 1, da grep in dieser Liste angezeigt wird.
Für alle Threads im Allgemeinen sollte dies funktionieren:
echo $(( `ps axms | wc -l` - 1))
Diesmal subtrahieren wir eins, weil es eine Kopfzeile gibt.
Um die Gesamtzahl der Threads (winzige Teile eines Prozesses, die gleichzeitig ausgeführt werden) von a zu erhalten, können ps -o nlwp <pid>
Sie den Befehl verwenden. Er funktioniert die ganze Zeit. Aber wenn Sie es vorziehen, versuchen Sie es durch eine Datei zu sehen. Sie sollten sich wahrscheinlich die Dateien ansehen, die für jeden einzelnen Prozess des Systems erstellt wurden. Dort erhalten Sie die ultimativen Details des Prozesses. Für jeden Prozess gibt es einen Ordner, in dem /proc/<pid>
Sie auch alle anderen Details sehen können.
Unter Linux gibt es eine Möglichkeit, dies pro Prozess durchzuführen:
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
return
fi
done < /proc/"$1"/status
Sie können dieses Skript dann mit einer PID als Argument aufrufen und die Anzahl der Threads anzeigen, deren Eigentümer dieser Prozess ist.
Um die Threadanzahl für das gesamte System zu ermitteln, reicht dies aus:
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
Diese Ansätze scheinen etwas unorthodox zu sein, da sie sich stark auf Shell-Features stützen, aber im Gegenzug sind beide schneller als die entsprechenden ps
und awk
auf meinem Computer basierenden Ansätze (und erstellen auch keine eigenen zusätzlichen Threads für Pipes). Bedenken Sie, dass die zum Ausführen dieser Skripte gestartete Shell einen eigenen Thread hat (oder mehr, wenn Sie eine seltsame Implementierung verwenden).