মাল্টিথ্রেডেড লিনাক্স প্রক্রিয়াটি যদি একটি সিগন্যাল পায় তবে কী হবে?


20

যদি কোনও ইউনিক্স (পিক্সিক্স) প্রক্রিয়া কোনও সংকেত পায় তবে একটি সিগন্যাল হ্যান্ডলার চলবে।

বহুবিবাহিত প্রক্রিয়াতে এটির কী হবে? কোন থ্রেড সংকেত গ্রহণ করে?

আমার মতে, সিগন্যাল এপিআই হ্যান্ডল করার জন্য প্রসারিত করা উচিত (অর্থাত্ সিগন্যাল হ্যান্ডলারের থ্রেডটি নির্ধারণ করা উচিত) তবে নেটটিতে ইনফোসের জন্য শিকার করতে গিয়ে আমি কেবল লিনাক্স কার্নেল মেলিং তালিকায় বছরের দীর্ঘ শিখা খুঁজে পাই এবং বিভিন্ন ফোরাম আমি যেমন বুঝতে পেরেছিলাম, লিনাসের ধারণাটি পক্সিক্স স্ট্যান্ডার্ড থেকে আলাদা এবং প্রথমে কিছু কমপ্যাট স্তর তৈরি করা হয়েছিল, তবে এখন লিনাক্স পক্সিক্সের মডেলটি অনুসরণ করে follows

বর্তমান অবস্থা কী?


3
সদৃশ stackoverflow.com/questions/11679568/... "pthreads (7) বর্ণনা করে যে POSIX.1 একটি প্রক্রিয়া ভাগ বৈশিষ্ট্যাবলী সমস্ত থ্রেড, সংকেত বিন্যাস তৎসহ"
স্টিভ

@ ধীরে ধীরে ধন্যবাদ, তবে 1) এটি অন্য এসই সাইটে রয়েছে 2) এই অনুমানটি স্পষ্টভাবে নির্দিষ্ট করে দেয় না, ঠিক কী হবে। এর অর্থ কী, সমস্ত থ্রেডে সিগন্যাল হ্যান্ডলারগুলি কল করা হবে তবে এটি আমার কাছে কিছুটা পরাবাস্তব মনে হয় seems 3) এই উত্তরে লিনাসের মডেলটি কী ছিল এবং কেন / বর্তমানে এটি কীভাবে ব্যবহৃত হয় তা নির্দিষ্ট করে না।
পিটার - মনিকা পুনরায় ইনস্টল করুন

উত্তর:


9

"যৌক্তিক: সিস্টেম ইন্টারফেসের সাধারণ তথ্য" তে " সিগন্যাল জেনারেশন এবং ডেলিভারি " তে পসেক্সে প্রবেশ

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

signal(7)লিনাক্স সিস্টেমের ম্যানুয়াল থেকে :

সম্পূর্ণরূপে প্রক্রিয়াটির জন্য (উদাহরণস্বরূপ, যখন প্রেরণ করা হয় kill(2)) বা নির্দিষ্ট থ্রেডের (উদাহরণস্বরূপ, নির্দিষ্ট সংকেত, যেমন সিএসএসইজিভি এবং সিএফএফপিই) একটি নির্দিষ্ট মেশিন- কার্যকর করার ফলাফল হিসাবে একটি সংকেত তৈরি করা যেতে পারে and ভাষার নির্দেশনা থ্রেডকে নির্দেশিত হয়, যেমন ব্যবহার করে নির্দিষ্ট থ্রেডে লক্ষ্যযুক্ত সংকেতগুলি pthread_kill(3))। প্রক্রিয়া-নির্দেশিত সংকেত যে কোনও থ্রেডে সরবরাহ করা যেতে পারে যা বর্তমানে সিগন্যালটি অবরুদ্ধ করে নেই। যদি থ্রেডগুলির একটিরও বেশি সংকেতটি অবরোধবিদ্ধ থাকে, তবে কার্নেল সিগন্যালটি সরবরাহ করার জন্য একটি নির্বিচার থ্রেড চয়ন করে।

এবং এর মধ্যে pthreads(7):

থ্রেডগুলিতে আলাদা বিকল্প সিগন্যাল স্ট্যাক সেটিংস রয়েছে। তবে এটি নতুন থ্রেডের বিকল্প সিগন্যাল স্ট্যাক সেটিংস তৈরি করা থ্রেড থেকে অনুলিপি করা হয়েছে, যাতে থ্রেডগুলি প্রাথমিকভাবে একটি বিকল্প সিগন্যাল স্ট্যাক ভাগ করে তোলে (কার্নেল ২.6.১6 এ স্থির)।

pthreads(3)ওপেনবিএসডি সিস্টেমের ম্যানুয়াল থেকে (বিকল্প পদ্ধতির উদাহরণ হিসাবে):

সিগন্যাল হ্যান্ডলারগুলি সাধারণত বর্তমানে সম্পাদিত থ্রেডের স্ট্যাকের উপর চালিত হয়।

(মাল্টি-প্রসেসর মেশিনে একাধিক থ্রেড একযোগে কার্যকর করা হয় তখন এটি কীভাবে পরিচালনা করা হয় সে সম্পর্কে আমি বর্তমানে অবগত নই)

POSIX থ্রেডগুলির পুরানো লিনাক্সথ্রেড বাস্তবায়ন কেবলমাত্র পৃথক একক থ্রেডকে সংকেত দ্বারা লক্ষ্যবস্তু করার অনুমতি দেয়। থেকে pthreads(7)একটি Linux সিস্টেমে:

লিনাক্সথ্রেডস প্রক্রিয়া-নির্দেশিত সংকেতগুলির ধারণাটিকে সমর্থন করে না: সংকেত কেবল নির্দিষ্ট থ্রেডে প্রেরণ করা যেতে পারে।

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