Cara mendapatkan (dari terminal) jumlah total utas (per proses dan total untuk semua proses)


Jawaban:


53

Untuk mendapatkan jumlah utas untuk pid yang diberikan:

ps -o nlwp <pid>

Untuk mendapatkan jumlah semua utas yang berjalan di sistem:

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

1
ps -o nlwp <pid>mengembalikan NLWP :), apa artinya itu?
Siddharth

2
@Siddharth NLWP adalah singkatan dari Number of LightWeight Processes yang merupakan jumlah utas.
jcollado

Anda dapat menekan "NLWP" dengan "h" (sembunyikan tajuk); yaitu:ps h -o nlwp $pid
bufh

7

Untuk menemukan jumlah utas yang menjalankan satu proses, Anda dapat melihatnya /proc/<pid>/status. Seharusnya daftar jumlah utas sebagai salah satu bidang.


3

Saya mendasarkan jawaban ini di sekitar ps axms. psadalah alat yang bagus untuk mendaftar apa yang sedang berjalan.

Jika Anda ingin memfilternya dengan suatu proses, Anda dapat mencoba sesuatu seperti ini:

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

Kami kurangi 1 karena grep akan ditampilkan dalam daftar itu.

Untuk semua utas secara umum, ini seharusnya berfungsi:

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

Kami kurangi satu kali ini karena ada baris tajuk.


Ini tidak akurat, karena melaporkan utas tambahan per proses
Score_Under

1

Untuk mendapatkan jumlah total utas (bagian-bagian kecil dari proses yang berjalan secara bersamaan) dari Anda dapat menggunakan perintah ps -o nlwp <pid>Ini berfungsi sepanjang waktu. Tetapi jika Anda lebih suka mencoba melihatnya melalui file. Anda mungkin harus melihat file yang dibuat untuk setiap proses sistem. Di sana Anda bisa mendapatkan detail akhir dari proses tersebut. Untuk setiap proses, ada folder yang dibuat di /proc/<pid>sana Anda dapat melihat semua detail lainnya juga.


1

Di linux secara khusus, berikut adalah salah satu cara untuk melakukannya per-proses:

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

Anda kemudian dapat memanggil skrip ini dengan PID sebagai argumen, dan skrip ini akan melaporkan jumlah utas yang dimiliki oleh proses itu.

Untuk mendapatkan jumlah utas untuk seluruh sistem, ini sudah cukup:

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

Pendekatan ini mungkin tampak sedikit ortodoks karena mereka sangat bergantung pada fitur shell, tetapi sebagai imbalannya keduanya lebih cepat daripada pendekatan yang sesuai psdan awkberbasis pada mesin saya (sementara juga tidak membuat thread tambahan sendiri untuk pipa). Ingatlah bahwa shell yang diluncurkan untuk menjalankan skrip ini akan memiliki utas sendiri (atau lebih, jika Anda menggunakan implementasi yang aneh).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.