कैसे प्राप्त करें (टर्मिनल से) थ्रेड्स की कुल संख्या (प्रति प्रक्रिया और सभी प्रक्रियाओं के लिए कुल)


32

मैंने इसे देखने की कोशिश की, लेकिन मुझे यह नहीं मिला। मैं खोज रहा हूँ:

  1. प्रक्रिया X में थ्रेड्स की संख्या

  2. वर्तमान में चल रहे धागों की कुल संख्या


जवाबों:


53

दिए गए pid के लिए थ्रेड्स की संख्या प्राप्त करने के लिए:

ps -o nlwp <pid>

सिस्टम में चल रहे सभी थ्रेड्स का योग प्राप्त करने के लिए:

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

1
ps -o nlwp <pid>रिटर्न NLWP :), इसका क्या मतलब है?
सिद्धार्थ

2
@ सिद्धार्थ एनएलडब्लूपी लाइटवेट प्रोसेस की संख्या के लिए खड़ा है जो कि थ्रेड्स की संख्या है।
जेकोलाडो

आप "एच" (छिपाने वाले हेडर) के साथ "एनएलडब्ल्यूपी" को दबा सकते हैं; यानी:ps h -o nlwp $pid
bufh

7

एक एकल प्रक्रिया को चलाने वाले धागों की संख्या का पता लगाने के लिए आप इसे देख सकते हैं /proc/<pid>/status। इसे खेतों में से एक के रूप में थ्रेड्स की संख्या को सूचीबद्ध करना चाहिए।


3

मैं इस उत्तर को आधार बना रहा हूं ps axmspsक्या चल रहा है लिस्टिंग के लिए एक महान उपकरण है।

यदि आप उस प्रक्रिया को फ़िल्टर करना चाहते हैं, तो आप कुछ इस तरह की कोशिश कर सकते हैं:

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

हम 1 घटाते हैं क्योंकि grep उस सूची में दिखाई देगा।

सामान्य तौर पर सभी थ्रेड्स के लिए यह काम करना चाहिए:

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

हम इस बार एक घटाते हैं क्योंकि एक हेडर पंक्ति है।


यह गलत है, क्योंकि यह प्रति प्रक्रिया एक अतिरिक्त धागा की रिपोर्ट करता है
स्कोर_उंडर

1

थ्रेड्स की कुल संख्या (एक साथ चलने वाली प्रक्रिया के छोटे टुकड़े) प्राप्त करने के लिए आप कमांड का उपयोग कर सकते हैं ps -o nlwp <pid>यह हर समय काम करता है। लेकिन अगर आप इसे एक फ़ाइल के माध्यम से देखने की कोशिश करना पसंद करते हैं। आपको सिस्टम की प्रत्येक प्रक्रिया के लिए बनाई गई फ़ाइलों को देखना चाहिए। वहां आप प्रक्रिया का अंतिम विवरण प्राप्त कर सकते हैं। प्रत्येक प्रक्रिया के लिए, वहाँ एक फ़ोल्डर बनाया जाता है जिसमें /proc/<pid>आप अन्य सभी विवरण भी देख सकते हैं।


1

विशेष रूप से लाइनक्स पर, इसे प्रति-प्रक्रिया करने का एक तरीका है:

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

फिर आप इस स्क्रिप्ट को एक तर्क के रूप में एक पीआईडी ​​के साथ आमंत्रित कर सकते हैं, और यह उस प्रक्रिया के स्वामित्व वाले थ्रेड्स की संख्या की रिपोर्ट करेगा।

पूरे सिस्टम के लिए थ्रेड काउंट प्राप्त करने के लिए, यह पर्याप्त है:

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

ये दृष्टिकोण थोड़ा अपरंपरागत लग सकता है जिसमें वे शेल विशेषताओं पर बहुत अधिक भरोसा करते हैं, लेकिन बदले में दोनों मेरी मशीन पर संबंधित psऔर- awkआधारित दृष्टिकोणों की तुलना में तेज हैं (जबकि पाइपों के लिए अपने स्वयं के अतिरिक्त थ्रेड्स भी नहीं बना रहे हैं)। ध्यान रखें कि इन लिपियों को चलाने के लिए जो शेल लॉन्च किया गया है, उसमें स्वयं का एक धागा होगा (या अधिक, यदि आप एक अजीब कार्यान्वयन का उपयोग कर रहे हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.