Come ottenere (dal terminale) il numero totale di thread (per processo e totale per tutti i processi)


Risposte:


53

Per ottenere il numero di thread per un determinato pid:

ps -o nlwp <pid>

Per ottenere la somma di tutti i thread in esecuzione nel sistema:

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

1
ps -o nlwp <pid>restituisce NLWP :), cosa significa?
Siddharth,

2
@Siddharth NLWP è l'acronimo di Number of LightWeight Processes, ovvero il numero di thread.
jcollado,

Puoi sopprimere "NLWP" con "h" (nascondi le intestazioni); cioè:ps h -o nlwp $pid
bufh

8

Per trovare il numero di thread che eseguono un singolo processo è possibile consultare /proc/<pid>/status. Dovrebbe elencare il numero di thread come uno dei campi.


3

Sto basando questa risposta in giro ps axms. psè un ottimo strumento per elencare ciò che è in esecuzione.

Se desideri filtrarlo in base a un processo, puoi provare qualcosa del genere:

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

Sottraiamo 1 perché grep verrà visualizzato in tale elenco.

Per tutti i thread in generale questo dovrebbe funzionare:

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

Ne sottraggiamo una volta perché c'è una riga di intestazione.


Ciò non è preciso, in quanto riporta un thread aggiuntivo per processo
Score_Under

1

Per ottenere il numero totale dei thread (piccoli pezzi di un processo in esecuzione contemporaneamente) di un è possibile utilizzare il comando ps -o nlwp <pid>Funziona sempre. Ma se preferisci provare a vederlo attraverso un file. dovresti probabilmente guardare i file che sono stati creati per ogni singolo processo del sistema. Lì puoi ottenere i dettagli finali del processo. Per ogni processo, c'è una cartella creata in /proc/<pid>cui puoi vedere anche tutti gli altri dettagli.


1

Su Linux in particolare, ecco un modo per farlo per processo:

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

È quindi possibile invocare questo script con un PID come argomento e riporterà il numero di thread di proprietà di quel processo.

Per ottenere il conteggio dei thread per l'intero sistema, è sufficiente:

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

Questi approcci possono sembrare un po 'poco ortodossi in quanto si basano fortemente sulle funzionalità della shell, ma in cambio entrambi sono più veloci degli approcci corrispondenti pse awkbasati sulla mia macchina (pur non creando thread aggiuntivi propri per le pipe). Ricorda che la shell lanciata per eseguire questi script avrà un thread a sé stante (o più, se stai usando una strana implementazione).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.