चार धागों में एक ही पीआईडी होगी लेकिन केवल ऊपर से देखने पर। जिसे आप (एक उपयोगकर्ता के रूप में) पीआईडी कहते हैं वह नहीं है जो कर्नेल (नीचे से देख रहा है) एक पीआईडी कहलाता है।
में गिरी, प्रत्येक थ्रेड उसके अपने आईडी, (हालांकि यह संभवतः इस एक टीआईडी, या धागे आईडी कॉल करने के लिए और अधिक समझ बनाने के हैं) और वे भी एक TGID (धागा समूह आईडी) एक पीआईडी कहा जाता है जो धागे की पीआईडी है इसने पूरी प्रक्रिया शुरू कर दी।
सरलीकृत रूप से, जब एक नई प्रक्रिया बनाई जाती है, तो यह एक थ्रेड के रूप में प्रकट होता है, जहां पीआईडी और टीजीआईडी दोनों एक ही (नई) संख्या होती हैं।
जब कोई थ्रेड कोई दूसरा थ्रेड प्रारंभ करता है , तो प्रारंभ किया गया थ्रेड अपना PID प्राप्त करता है (इसलिए शेड्यूलर इसे स्वतंत्र रूप से शेड्यूल कर सकता है) लेकिन यह TGID को मूल थ्रेड से इनहेरिट करता है।
इस तरह, कर्नेल खुशी से थ्रेड्स को शेड्यूल कर सकता है कि वे किस प्रक्रिया से संबंधित हैं, जबकि प्रोसेस (थ्रेड ग्रुप आईडी) आपको बताए जाते हैं।
धागे की निम्नलिखित पदानुक्रम मदद कर सकते हैं (ए) :
USER VIEW
<-- PID 43 --> <----------------- PID 42 ----------------->
+---------+
| process |
_| pid=42 |_
_/ | tgid=42 | \_ (new thread) _
_ (fork) _/ +---------+ \
/ +---------+
+---------+ | process |
| process | | pid=44 |
| pid=43 | | tgid=42 |
| tgid=43 | +---------+
+---------+
<-- PID 43 --> <--------- PID 42 --------> <--- PID 44 --->
KERNEL VIEW
आप देख सकते हैं कि एक नई प्रक्रिया शुरू करना (बाईं ओर) आपको एक नया पीआईडी और एक नया TGID (दोनों एक ही मूल्य पर सेट) देता है, जबकि एक नया सूत्र (दाईं ओर) शुरू करते हुए आपको एक नया PID प्रदान करता है टीजीआईडी उस धागे के रूप में जिसने इसे शुरू किया था।
(ए) मेरे प्रभावशाली चित्रमय कौशल पर विस्मयकारी :-)
getpid()
tgid लौटाता है:asmlinkage long sys_getpid(void) { return current->tgid;}
जैसा कि www.makelinux.com/