32 और 33 की सिग्नल संख्या को `किल-एल` क्यों नहीं करता है?


18

kill -lलिनक्स पर निष्पादन देता है:

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

क्या हुआ 32और 33? इसे सूचीबद्ध क्यों नहीं किया गया है? वे 1 पर शुरू हो सकते थे और बीच में 2 लंघन के बजाय 62 पर समाप्त हो सकते थे?


PS "त्रुटि कोड" नहीं हैं - वे सिग्नल नंबर हैं।
जी-मैन का कहना है कि 'मोनिका'

जवाबों:


20

इसकी वजह है एनपीटीएल । चूंकि यह जीएनयू सी लाइब्रेरी का हिस्सा है, लगभग हर आधुनिक लिनक्स वितरण पहले दो वास्तविक समय संकेतों का उपयोग नहीं करता है। NPTL POSIX थ्रेड्स का एक कार्यान्वयन है । एनपीटीएल पहले दो वास्तविक समय के संकेतों का आंतरिक उपयोग करता है।

सिग्नल मैनपेज का यह हिस्सा बहुत दिलचस्प है:

लिनक्स कर्नेल 32 विभिन्न रियल-टाइम सिग्नलों की एक श्रृंखला का समर्थन करता है, जिनकी संख्या 33 से 64 है। हालांकि, ग्लोब पीओएसआईएक्स थ्रेड कार्यान्वयन आंतरिक रूप से दो (एनपीटीएल के लिए) या तीन (लिनक्सट्रेड्स के लिए) वास्तविक समय के संकेतों का उपयोग करता है (pthreads (7) देखें) , और उपयुक्त रूप से (34 या 35 के लिए) SIGRTMIN के मूल्य को समायोजित करता है। चूँकि उपलब्ध रीयल-टाइम सिग्नलों की सीमा ग्लिबक थ्रेडिंग कार्यान्वयन के अनुसार भिन्न होती है (और यह भिन्नता उपलब्ध कर्नेल और ग्लिबक के अनुसार रन टाइम पर हो सकती है), और वास्तव में रियल-टाइम सिग्नलों की सीमा यूनिक्स प्रणालियों में भिन्न होती है, कार्यक्रमों को करना चाहिए हार्ड-कोड किए गए नंबरों का उपयोग करके कभी भी वास्तविक समय के संकेतों का उल्लेख न करें, बल्कि इसके बजाय हमेशा संकेतन SIGRTMIN + n का उपयोग करके वास्तविक समय के संकेतों का उल्लेख करना चाहिए, और उपयुक्त (रन-टाइम) जांचों को शामिल करना चाहिए कि SIGRTMIN + n SIGRTMAX से अधिक न हो।

मैंने glibc के स्रोत कोड की भी जाँच की; पंक्ति 22 देखें । __SIGRTMIN+2 बढ़ गया है, इसलिए पहले दो वास्तविक समय संकेतों को वास्तविक समय संकेतों की सीमा से बाहर रखा गया है।


तो किसी को कोड निष्पादित करने के भाग में SIGRTMIN का वर्तमान मूल्य कैसे मिलता है?
स्लीव्सवेन

10

क्योंकि संकेत हैं:

SIGWAITING 32 Ignore All LWPs blocked 
    SIGLWP 33 Ignore Virtual Interprocessor Interrupt for Threads Library 

न तो लिनक्स में समर्थित हैं। ( लाइटवेट प्रोसेस के लिए LWP का मतलब है )

स्रोत: IBM DeveloperWorks Solaris से Linux Porting Guide


लिनक्स में सिग्नल 32 और 33 था। देखें: unixhelp.ed.ac.uk/CGI/man-cgi?signal+7 , Real-time Signalsअनुभाग।
cuonglm

@Gnouc - kill -l RTMIN34 के अनुसार शुरू होता है, 32 नहीं जैसा कि आपने संदर्भित दस्तावेज के अनुसार। यह एक कहता है कि यह 33 से शुरू होता है, लेकिन यह कहने के लिए जाता है कि आपको उन्हें संख्याओं द्वारा संदर्भित नहीं करना चाहिए, क्योंकि संख्या ग्लिबेक प्रसार के आधार पर भिन्न हो सकती है।
garethTheRed

बेशक यह प्रणाली के आधार पर भिन्न होता है, लेकिन लिनक्स शब्द का समर्थन नहीं किया जाना गलत है। आप इसका उल्लेख कर सकते हैं: cse.psu.edu/~dheller/cmpsc311/Lectures/Process-Control-Signals/… । हो सकता है कि हमें एक वेरियन की जरूरत हो, जो बहुत समय पहले लिनक्स के साथ काम कर रहा हो, हमें यह बताने के लिए कि संकेत 32, 33 के साथ क्या होता है। वे दस्तावेज क्यों नहीं हैं।
cuonglm

वे आंतरिक रूप से RT pthread लाइब्रेरी द्वारा उपयोग किए जाते हैं - और अतीत में तीन नहीं दो होंगे क्योंकि एक अलग प्रणाली ने आंतरिक उद्देश्यों के लिए कई उपयोग किए थे। देखने के कोडिंग बिंदु से आप SIGSYS जैसे संकेतों के लिए संकलित-समय स्थिरांक का उपयोग करने वाले नहीं हैं, उदाहरण SIGRTMINके लिए एक #defineपंक्ति के साथ एक सेट क्योंकि वह संख्या बाद में संभावित परिवर्तन के अधीन है जब निष्पादन योग्य चलाया जाता है। यह कुछ साल पहले दिखा होगा जब दोनों pthread libs उपयोग में थे अगर एक pthread लाइब्रेरी के खिलाफ संकलित एक एप्लिकेशन को एक सिस्टम पर चलाया गया था जिसे दूसरे के साथ रिबूट किया गया था!
सिल्वेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.