ডকুমেন্টেশনটি বেশ বিভ্রান্তিকর হতে পারে, সুতরাং এখানে " আসল " লিনাক্স মডেলটি রয়েছে:
- লিনাক্স কার্নেলের ভিতরে, এমন কিছু যা চালানো যায় (& নির্ধারিত) তাকে "প্রক্রিয়া" বলা হয়,
- প্রতিটি প্রক্রিয়াটির একটি সিস্টেম-অনন্য প্রসেস আইডি (পিআইডি), এবং একটি থ্রেড গ্রুপ আইডি (টিজিআইডি) রয়েছে,
- একটি "স্বাভাবিক" প্রক্রিয়াতে PID = TGID থাকে এবং অন্য কোনও প্রক্রিয়া এই TGID মান ভাগ করে না,
- একটি "থ্রেডেড" প্রক্রিয়া এমন একটি প্রক্রিয়া যা টিজিআইডি মান অন্যান্য প্রক্রিয়াগুলি দ্বারা ভাগ করা হয়,
- একই টিজিআইডি ভাগ করে নেওয়ার বিভিন্ন প্রক্রিয়াও কমপক্ষে একই মেমরি স্পেস এবং সিগন্যাল হ্যান্ডলার (কখনও কখনও আরও) ভাগ করে দেয়,
- যদি কোনও "থ্রেডেড" প্রক্রিয়াতে PID = TGID থাকে, তবে এটি "মূল থ্রেড" বলা যেতে পারে,
- যে
getpid()
কোনও প্রক্রিয়া থেকে কল করা তার TGID (= "মূল থ্রেড" পিআইডি) ফিরিয়ে দেবে,
- যে
gettid()
কোনও প্রক্রিয়া থেকে কল করা তার পিআইডি (!) ফিরিয়ে দেবে,
clone(2)
সিস্টেম কল দিয়ে যে কোনও ধরণের প্রক্রিয়া তৈরি করা যেতে পারে ,
- ফোল্ডারগুলির সংখ্যাসূচক নামগুলি আপনি টিজিআইডি
ls /proc
হিসাবে তালিকাভুক্ত করতে পারেন /proc/NUMBER
,
- ফোল্ডারের সংখ্যার নামগুলি
/proc/TGID/task
যেমন /proc/TGID/task/NUMBER
পিআইডি রয়েছে,
- যদিও আপনি প্রতিটি বিদ্যমান PIDs দেখতে না
ls /proc
, আপনি এখনও কি করতে পারেন cd /proc/any_PID
।
উপসংহার : কার্নেল দৃষ্টিকোণ থেকে, কেবলমাত্র প্রক্রিয়া বিদ্যমান, প্রত্যেকের নিজস্ব অনন্য পিআইডি রয়েছে এবং তথাকথিত থ্রেডটি কেবল একটি ভিন্ন ধরণের প্রক্রিয়া।
দ্রষ্টব্য: লিনাক্সে "থ্রেড" ধারণাটি বাস্তবায়নের ফলে একটি ভোকাবুলারি বিভ্রান্তি ঘটেছে এবং যদি getpid()
আপনি মিথ্যা বলছেন যা আপনি যা ভাবেন তা না করে, কারণ এর আচরণটি পসিক্সের সামঞ্জস্যের অনুসরণ করে (থ্রেডগুলি একটি সাধারণ পিআইডি ভাগ করে নেবে বলে মনে করা হয়) ।