तो मेरे पास एक दिलचस्प डिजाइन समस्या है। मैं एसएलएस 9 + लिनक्स, कर्नेल 2.6+ पर काम कर रहा हूं, और एक बहु थ्रेडेड एप्लिकेशन आरपीसी क्लाइंट के रूप में कार्य कर रहा हूं। विचार है कि अनुरोधों को संसाधित करने के लिए कुछ धागे रखें; ऐसा एक अनुरोध है कि एक बच्चे की प्रक्रिया के रूप में "नौकरी" शुरू करें।धागे, संकेत और बाल हैंडलिंग: क्या दुनिया ... क्या दुनिया
अब मेरी समस्या यह है कि विभिन्न सिग्नल से निपटने के लिए एक उचित सिग्नल हैंडलर स्थापित कर रहा है। मैंने जो किया है, वह अन्य धागे में सभी प्रासंगिक संकेतों को अवरुद्ध करते हुए sigwait()
स्थिति पर बैठे सिग्नल हैंडलिंग के लिए एक और धागा स्थापित किया गया है। विचार यह है कि प्रक्रिया के लिए सभी सिग्नल सिग्नल हैंडलिंग थ्रेड को वितरित किए जाने चाहिए और शेष धागे केवल प्रोसेसिंग अनुरोधों के बारे में चिंता कर सकते हैं जैसे कि वे अंदर आते हैं।
यह सब उन सड़े हुए बच्चों को छोड़कर महान काम करता है, हमेशा अपने पिछवाड़े में अपने Frisbees फेंक और मेरे लॉन पर trampling ... लेकिन सभी गंभीरता में, मेरे सिग्नल हैंडलिंग थ्रेड SIGCHLD संकेत नहीं मिल रहा है। यहां क्या हो रहा है के बारे में मेरा सबसे अच्छा अनुमान यह है कि सिग्नल हैंडिंग थ्रेड वह धागा नहीं है जो बच्चे को जन्म देता है, यह सिगचल प्राप्त करने वाला धागा नहीं होगा, बल्कि इसके बजाय मेरे कार्यकर्ता धागे जो करेंगे।
तो मेरे सवालों के लिए के रूप में:
- मैं के बारे में SIGCHLD मेरी संकेत हैंडलर धागा करने के लिए यह नहीं कर पागल हूँ?
- यदि मैं पागल नहीं हूं (यह एक खिंचाव है, मुझे पता है), आप इस छोटी सी समस्या को ठीक करने के बारे में कैसे जाएंगे? वर्तमान में मैं जो कर रहा हूं वह सिगचल्ड के लिए एक बहुत ही सरल सिग्नल हैंडलर सेट कर रहा है जो सभी धागे पर स्थापित होता है जो सिग्नल हैंडलिंग थ्रेड की अनुमति देने वाले सभी धागे में अवरुद्ध है जो प्रक्रिया समूह को सिगसआर 2 सिग्नल के रूप में सिग्नल भेजता है। यह काम करने के लिए लगता है, हालांकि मैं सोचने में मदद नहीं कर सकता कि मुझे कुछ याद आ रहा है या को संभालने का एक बेहतर तरीका है ... वह उसे प्राप्त करें, संभाल लें ... ठीक है मैं ' ll अब रोक
As per David Schwartz request SLES9: NPTL 2.3.5, SLES10: NPTL2.4
मुझे अस्पष्ट क्यों है कि आप सिग्नल हैंडलिंग करने के लिए एक और धागा क्यों चाहते हैं। इसे ओएस द्वारा वैसे भी असीमित रूप से बुलाया जाएगा।यदि हैंडलर में काम करने का एक गुच्छा है, तो मैं एक सरल, त्वरित हैंडलर लिखूंगा जो एक सेमफोर फेंकता है और कार्यकर्ता धागे को बंद करता है। – EdH
आप पागल नहीं हैं। सिग्नल को * किसी * थ्रेड द्वारा नियंत्रित किया जा सकता है जिसमें सिग्नल अवरुद्ध नहीं होता है। – nos
"क्या दुनिया" वास्तव में समस्या का वर्णन नहीं करता है। –