लिनक्स बाल प्रक्रियाओं के अलावा थ्रेड्स कैसे बताता है?


21

लिनक्स वास्तव में प्रक्रियाओं और थ्रेड्स के बीच अंतर नहीं करता है, और डेटा संरचना के रूप में दोनों को लागू करता है task_struct

तो क्या लिनक्स अपने बच्चे की प्रक्रियाओं से एक प्रक्रिया के धागे को बताने के लिए उन्हें कुछ कार्यक्रम प्रदान करता है? उदाहरण के लिए, क्या लिनक्स में एक प्रक्रिया के सभी थ्रेड्स का विवरण देखने का कोई तरीका है?

धन्यवाद।

जवाबों:


28

एक task_structदृष्टिकोण से, एक प्रक्रिया के थ्रेड्स में एक ही थ्रेड ग्रुप लीडर ( group_leaderइनtask_struct ) होता है, जबकि चाइल्ड प्रोसेस में एक अलग थ्रेड ग्रुप लीडर (प्रत्येक व्यक्तिगत चाइल्ड प्रोसेस) होता है।

यह जानकारी उपयोगकर्ता अंतरिक्ष के संपर्क में है के माध्यम से/proc फाइल सिस्टम। आप को देख कर माता पिता और बच्चों का पता लगा सकते ppidमें क्षेत्र /proc/${pid}/statया .../status(यह माता पिता पीआईडी देता है); आप tgidफ़ील्ड को देख कर थ्रेड्स का पता लगा सकते हैं .../status(यह थ्रेड समूह आईडी देता है, जो समूह लीडर की पिड भी है)। एक प्रक्रिया के धागे को /proc/${pid}/taskडायरेक्टरी में दिखाई देते हैं : प्रत्येक थ्रेड का अपना उपनिर्देशिका होता है। (हर प्रक्रिया में कम से कम एक धागा है।)

व्यवहार में, अपने स्वयं के थ्रेड्स का ट्रैक रखने के इच्छुक प्रोग्राम OS-विशिष्ट जानकारी का उपयोग करने के बजाय अपने द्वारा उपयोग किए जा रहे थ्रेडिंग लाइब्रेरी द्वारा प्रदान किए गए API पर निर्भर होंगे। आमतौर पर यूनिक्स जैसी प्रणालियों का मतलब है कि pthreads का उपयोग करना।


शेल पाइपलाइन में प्रत्येक प्रक्रिया (गूंज फू बिल्ली | बिल्ली) एक ही समूह के नेता (शेल) को साझा करती है, लेकिन वे एक ही प्रक्रिया में धागे नहीं हैं।
Psusi

2
आप प्रक्रिया समूहों के बारे में बात कर रहे हैं; मेरे जवाब में, समूह के नेता कर्नेल के दृष्टिकोण से हैं। कर्नेल के लेखांकन में, अलग-अलग प्रक्रियाएं अपने स्वयं के समूह के नेता हैं। आप इसे प्रत्येक प्रक्रिया की फ़ाइल में मानों को चलाकर (sleep 120 | sleep 120) &और देख कर देख सकते हैं । Tgidsleep/proc/${pid}/status
स्टीफन किट

अरे अजीब है। मुझे नहीं पता था कि "थ्रेड ग्रुप लीडर" के रूप में ऐसी कोई चीज थी और मुझे लगा कि एक बहुप्रतिक्षित प्रक्रिया में सभी सूत्र समान हैं और कोई "लीडर" नहीं है। उनमें से कोई भी बाहर निकल सकता है और जब तक कोई रहता है, प्रक्रिया मृत नहीं होती है।
Psusi

5
  1. यह topकुछ अतिरिक्त विकल्पों के साथ कमांड चलाता है :

    top -H -b -n 1
    
    • -Hतर्क का निर्देश प्रत्येक व्यक्ति के सूत्र दिखाने में शीर्ष। आम तौर पर शीर्ष अपनी मूल प्रक्रिया के तहत सभी थ्रेड को संक्षेप में प्रस्तुत करता है।
    • -bतर्क बैच मोड में शीर्ष रन बनाता है - जानकारी एकत्र की जाती है, दिखाया गया है, और उसके बाद के रूप में एक इंटरैक्टिव मोड में चल रहा है और ताज़ा डेटा प्रदर्शित करने के लिए विरोध के लिए stdout फेंक दिया।
    • -bविकल्प के साथ , उपयोगकर्ता को यह बताना होगा कि कितनी बार चलना है, यह -nतर्क के साथ किया जाता है और अंतिम तर्क के साथ कितनी बार चलना है।

    इसलिए top -H -b -n 1सिस्टम को "रन टॉप, इंडिविजुअल थ्रेड्स प्रदर्शित करें, बैच मोड में रन करें, और केवल एक बार रन करें" को निर्देश देता है।

  2. psआदेश की प्रक्रिया अभी चल रहा का एक स्नैपशॉट रिपोर्ट।

    ps -eLf
    

    -eLfतर्क (के रूप में इस्तेमाल किया जा सकता -e -L -fइस प्रकार नीचे टूट जाता है के रूप में अच्छी):

    • epsसभी प्रक्रियाओं को प्रदर्शित करने के लिए कहता है, भले ही उन्हें या उनकी वर्तमान स्थिति की परवाह किए बिना - सक्रिय, नींद, रोका गया, I / O की प्रतीक्षा कर रहा है, आदि।
    • Lpsव्यक्तिगत धागे दिखाने के लिए कहता है
    • आउटपुट को पूर्ण प्रारूप सूची के रूप में प्रारूपित करने के लिए fकहता psहै, और Lतर्क के साथ NLWP (थ्रेड्स की संख्या) और LWP (थ्रेड आईडी) कॉलम को आउटपुट में जोड़ा जाता है।

1

पीआईडी ​​पी 1 के साथ एक प्रक्रिया पर विचार करें

task_structपी 2 के रूप में एक बच्चे की प्रक्रिया का उद्देश्य पीपीआईडी ​​(माता-पिता पीआईडी) होगा, और यह पीआईडी ​​और टीजीआईडी ​​है, कहते हैं, पी 2।

task_structP1 का एक धागा की वस्तु के रूप पीआईडी सेट, कहते हैं p3, लेकिन p1 के लिए TGID सेट करना होगा।


तो आप स्टीफन किट के रूप में एक ही बात कह रहे हैं , लेकिन बहुत कम स्पष्ट रूप से। PS क्यों चर्चा में PPID लाने के लिए परेशान है अगर आप यह नहीं कहने जा रहे हैं कि एक सूत्र का PPID क्या है?
स्कॉट

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