লিনাক্স কীভাবে শিশু প্রক্রিয়াগুলি বাদ দিয়ে থ্রেডগুলি জানায়?


21

লিনাক্স আসলে প্রক্রিয়া এবং থ্রেডের মধ্যে পার্থক্য করে না এবং ডেটা স্ট্রাকচার হিসাবে উভয়ই প্রয়োগ করে task_struct

সুতরাং লিনাক্স তাদের শিশু প্রক্রিয়াগুলি থেকে কোনও প্রক্রিয়াটির থ্রেডগুলি জানাতে তাদের জন্য কিছু প্রোগ্রামকে কী সরবরাহ করে? উদাহরণস্বরূপ, লিনাক্সে কোনও প্রক্রিয়া রয়েছে এমন সমস্ত থ্রেডের বিশদ দেখার কোনও উপায় আছে কি?

ধন্যবাদ।

উত্তর:


28

একটি task_structদৃষ্টিকোণ থেকে , একটি প্রক্রিয়া থ্রেডে একই থ্রেড গ্রুপ লিডার ( group_leaderইনtask_struct ) থাকে, অন্যদিকে শিশু প্রসেসগুলির একটি আলাদা থ্রেড গ্রুপ লিডার থাকে (প্রতিটি স্বতন্ত্র শিশু প্রক্রিয়া)।

এই তথ্যটি ইউজার-স্পেস উন্মুক্ত হয় মাধ্যমে/proc ফাইল সিস্টেম। আপনি ppidমাঠে /proc/${pid}/statবা .../statusএই ক্ষেত্রটি দেখে বাচ্চাদের সন্ধান করতে পারেন (এটি প্যারেন্ট পিড দেয়); আপনি tgidক্ষেত্রটি দেখে থ্রেডগুলি সনাক্ত করতে পারেন .../status(এটি থ্রেড গ্রুপ আইডি দেয় যা এটি গ্রুপ নেতার পিডও)। একটি প্রক্রিয়াটির থ্রেডগুলি /proc/${pid}/taskডিরেক্টরিতে দৃশ্যমান করা হয় : প্রতিটি থ্রেডের নিজস্ব উপ-ডিরেক্টরি হয়। (প্রতিটি প্রক্রিয়াটিতে কমপক্ষে একটি থ্রেড থাকে))

অনুশীলনে, নিজস্ব থ্রেডগুলি ট্র্যাক রাখতে ইচ্ছুক প্রোগ্রামগুলি ওএস-নির্দিষ্ট তথ্য ব্যবহারের পরিবর্তে থ্রেডিং গ্রন্থাগারটি তারা ব্যবহার করছেন এমন APIs এর উপর নির্ভর করবে। সাধারণত ইউনিক্স-এর মতো সিস্টেমে যার অর্থ পাথ্রেড ব্যবহার করা হয়।


শেল পাইপলাইনের প্রতিটি প্রক্রিয়া (ইকো ফু | বিড়াল) একই গ্রুপ লিডার (শেল) ভাগ করে, তবে তারা একই প্রক্রিয়াতে থ্রেড হয় না।
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একটি শিশু প্রক্রিয়ার বস্তুর P1 হিসাবে PPID (পিতা বা মাতা PID,) হবে, এবং এটা, বলে, P2 PID, এবং TGID সেট আছে।

task_structP1 একটি থ্রেড অবজেক্ট হিসেবে PID, সেট, বলে P3 কিন্তু P1 থেকে TGID সেট করতে হবে।


সুতরাং আপনি স্টিফেন কিট হিসাবে একই জিনিস বলছেন , কিন্তু খুব কম পরিষ্কার। পিএস যদি পিছুডকে আলোচনার আওতায় আনতে বিরক্ত করেন তবে আপনি যদি থ্রেডের পিপিআইডি কী তা বলছেন না?
স্কট

পিআইডি এবং টিজিআইডি সবসময় একই থাকে।
টিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.