Comment obtenir (à partir du terminal) le nombre total de threads (par processus et total pour tous les processus)


Réponses:


53

Pour obtenir le nombre de threads pour un pid donné:

ps -o nlwp <pid>

Pour obtenir la somme de tous les threads exécutés dans le système:

ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

1
ps -o nlwp <pid>renvoie NLWP :), qu'est-ce que cela signifie?
Siddharth

2
@Siddharth NLWP signifie Number of LightWeight Processes qui est le nombre de threads.
jcollado

Vous pouvez supprimer le "NLWP" avec "h" (masquer les en-têtes); Soit:ps h -o nlwp $pid
bufh

8

Pour trouver le nombre de threads exécutant un seul processus, vous pouvez consulter /proc/<pid>/status. Il doit répertorier le nombre de threads comme l'un des champs.


3

Je fonde cette réponse ps axms. psest un excellent outil pour répertorier ce qui est en cours d'exécution.

Si vous souhaitez filtrer cela par un processus, vous pouvez essayer quelque chose comme ceci:

echo $(( `ps axms | grep firefox | wc -l`  - 1))

Nous soustrayons 1 car grep apparaîtra dans cette liste.

Pour tous les threads en général, cela devrait fonctionner:

echo $(( `ps axms | wc -l`  - 1))

Nous soustrayons un cette fois car il y a une ligne d'en-tête.


Ceci est inexact, car il signale un thread supplémentaire par processus
Score_Under

1

Pour obtenir le nombre total de threads (petits morceaux d'un processus s'exécutant simultanément) d'un, vous pouvez utiliser la commande ps -o nlwp <pid>Cela fonctionne tout le temps. Mais si vous préférez essayer de le voir à travers un fichier. vous devriez probablement regarder les fichiers qui ont été créés pour chaque processus du système. Là, vous pouvez obtenir les détails ultimes du processus. Pour chaque processus, un dossier est créé dans lequel /proc/<pid>vous pouvez également voir tous les autres détails.


1

Sur Linux en particulier, voici une façon de le faire par processus:

#!/bin/sh
while read name val; do
    if [ "$name" = Threads: ]; then
        printf %s\\n "$val"
        return
    fi
done < /proc/"$1"/status

Vous pouvez ensuite invoquer ce script avec un PID comme argument, et il indiquera le nombre de threads appartenant à ce processus.

Pour obtenir le nombre de threads pour l'ensemble du système, cela suffit:

#!/bin/sh
count() {
    printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*

Ces approches peuvent sembler un peu peu orthodoxe car ils comptent beaucoup sur les fonctionnalités shell, mais en retour , deux d'entre eux sont plus rapides que les correspondants pset les awkapproches à base sur ma machine (tout en ne créant pas des fils supplémentaires de leur propre pour les tuyaux). Gardez à l'esprit que le shell lancé pour exécuter ces scripts aura un thread qui lui est propre (ou plus, si vous utilisez une implémentation étrange).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.