2009-12-18 4 views
6

में लंबित सिग्नल की संख्या निर्धारित करने के लिए मुझे लिनक्स में थ्रेड के सिग्नल कतार में लंबित संकेतों की संख्या को खोजने की आवश्यकता है। क्या लिनक्स द्वारा प्रदान किया गया कोई एपीआई है?यूनिक्स सिग्नल कतार (लिनक्स)

इस एपीआई को धागे से बुलाया जाना चाहिए, जो हम पूछ रहे हैं थ्रेड के अलावा।

sigpending कॉलिंग थ्रेड के लिए एपीआई देता है। क्या कोई एपीआई है, जो थ्रेड आईडी को तर्क के रूप में लेती है, और कतार में लंबित सिग्नल के बारे में कुछ जानकारी प्रदान करती है।

किसी भी मदद की सराहना की जाती है।

उत्तर

3

मुझे ऐसे एपीआई से अवगत नहीं है, लेकिन यहां एक कामकाज है: सिग्नल कोड को लपेटने वाली एक छोटी लाइब्रेरी लिखें। जब आप एक सिग्नल भेजते हैं, तो परमाणु काउंटर बढ़ाएं। जैसे ही आप सिग्नल को संसाधित करते हैं, फिर काउंटर को कम करें। फिर, आप अपनी जिज्ञासा का जवाब देने के लिए इस परमाणु काउंटर का उपयोग कर सकते हैं।

[संपादित करें] यदि यह पर्याप्त नहीं है, तो आपके पास स्रोत है: बस कोड और डेटा संरचनाओं की जांच करें और कर्नेल संरचनाओं में देखने के लिए आपको जो चाहिए उसे उपयोग करें। लेकिन इसमें एक मॉड्यूल लिखना शामिल हो सकता है (क्योंकि कर्नेल की डेटा संरचनाएं प्रक्रिया द्वारा पठनीय नहीं हैं) और आपका कोड कर्नेल पर निर्भर हो जाएगा जिस पर इसे संकलित किया गया था। इसलिए मैं इस दृष्टिकोण के खिलाफ सलाह देता हूं।

+2

यह वही है जो मैंने लंबित (असुरक्षित) आरटी संकेतों को खोजने के लिए सबसे अधिक देखा है। अन्य लोग कर्नेल द्वारा वैसे भी संयुक्त (प्रकार के अनुसार) हैं, जो ध्यान देने योग्य हो सकते हैं। 10,000 SIGUSR1 को 1 के रूप में वितरित किया गया है। –

6

sigpending() थ्रेड के लिए डिलीवरी लंबित संकेतों का सेट देता है। आप उस sigset_t पर पुन: सक्रिय हो सकते हैं और सदस्यता के लिए परीक्षण करने के लिए सिग्सिम्बर() का उपयोग कर सकते हैं।

पारंपरिक रूप से, यूनिक्स सिग्नल के एक से अधिक उदाहरण कतार नहीं करता है (इस अर्थ में, वे "अविश्वसनीय" जारी रहते हैं)। कभी-कभी आप रीयलटाइम संकेतों के साथ इस प्रभाव को प्राप्त कर सकते हैं।

लिनक्स पर, सिग्नलफ्रेड से पढ़ा() आईएनजी एक सिग्नल के एक से अधिक उदाहरणों को एक बार में पढ़ने की अनुमति देगा, उन्हें कतारबद्ध किया जाना चाहिए।