(Terminalden) toplam iş parçacığı sayısını (işlem başına ve tüm işlemler için toplam) alma


Yanıtlar:


53

Verilen bir ihale için iş parçacığı sayısını almak için:

ps -o nlwp <pid>

Sistemde çalışan tüm iş parçacıklarının toplamını elde etmek için:

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

1
ps -o nlwp <pid>NLWP'yi verir :), bu ne anlama geliyor?
Siddharth,

2
@Siddharth NLWP, iplik sayısı olan LightWeight İşlemlerinin Sayısı anlamına gelir.
jcollado

"NLWP" yi "h" ile gizleyebilirsiniz (başlıkları gizle); yani:ps h -o nlwp $pid
bufh

7

Tek bir işlem çalıştıran iş parçacığı sayısını bulmak için bakabilirsiniz /proc/<pid>/status. Konu sayısını alanlardan biri olarak listelemelidir.


3

Bu cevabı temel alıyorum ps axms. psçalışanların listelenmesi için harika bir araçtır.

Bunu bir işlemle filtrelemek istiyorsanız, bunun gibi bir şeyi deneyebilirsiniz:

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

1 çıkardık çünkü grep bu listede gösterilecek.

Genel olarak tüm iş parçacıkları için bu çalışması gerekir:

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

Bu sefer bir tane çıkartıyoruz, çünkü bir başlık satırı var.


Bu, işlem başına ekstra bir iş parçacığı bildirdiği için yanlış
Score_Under

1

Toplam iş parçacığı sayısını (aynı anda çalışan bir işlemin küçük parçaları) almak için bu komutu ps -o nlwp <pid>her zaman kullanabilirsiniz. Ancak bir dosyayı görmeyi denemeyi tercih ederseniz. Muhtemelen sistemin her işlemi için oluşturulan dosyalara bakmalısınız. Orada sürecin nihai ayrıntılarını alabilirsiniz. Her işlem için, orada yaratılan bir klasör /proc/<pid>var, diğer tüm detayları da görebilirsiniz.


1

Özellikle Linux üzerinde, işlem başına yapmanın bir yolu:

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

Ardından, bu betiği bir PID ile bağımsız değişken olarak çağırabilirsiniz ve işlemin sahip olduğu iş parçacıklarının sayısını rapor eder.

Tüm sistemin iş parçacığı sayısını almak için bu yeterlidir:

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

Bu yaklaşımlar, özellikle kabuk özelliklerine dayanmaları nedeniyle biraz sıradışı görünebilir, ancak bunun karşılığında ikisi de makinemdeki karşılık gelen psve awktemelli yaklaşımlardan daha hızlıdır (aynı zamanda borular için kendi başlarının dişlerini oluşturmazlar). Bu komut dosyalarını çalıştırmak için başlatılan kabuğun kendine ait bir dizisinin olacağını (veya garip bir uygulama kullanıyorsanız) aklınızda bulundurun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.