Wie erhalte ich (vom Terminal) die Gesamtzahl der Threads (pro Prozess und die Gesamtzahl für alle Prozesse)?

32

Ich habe versucht, es zu googeln, aber ich kann es nicht finden. Ich suche nach:

  1. Anzahl der Threads in Prozess X

  2. Gesamtzahl der aktuell laufenden Threads

NoSenseEtAl
quelle

Antworten:

53

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 }'
jcollado
quelle
1
ps -o nlwp <pid>gibt NLWP zurück :), was bedeutet das?
Siddharth
2
@Siddharth NLWP steht für Number of LightWeight Processes (Anzahl der LightWeight-Prozesse) und gibt die Anzahl der Threads an.
jcollado
Sie können das "NLWP" mit "h" unterdrücken (Überschriften verbergen); dh:ps h -o nlwp $pid
bufh
7

Sie können die Anzahl der Threads ermitteln, die einen einzelnen Prozess ausführen /proc/<pid>/status. Es sollte die Anzahl der Threads als eines der Felder auflisten.

anaken78
quelle
3

Ich stütze mich auf diese Antwort ps axms. psist 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.

Oli
quelle
Dies ist ungenau, da pro Prozess ein zusätzlicher Thread
gemeldet
1

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.

Laksith
quelle
1

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 psund awkauf 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).

Score_Under
quelle