2015-11-03 5 views
6

का उपयोग कैसे करूं मैं थोड़ी उलझन में हूं। जैसा कि मैं समझता हूं, -1 के एक पिड के साथ प्रतीक्षापैड का मतलब है कि मैं सभी बच्चों के खत्म होने का इंतजार करता हूं, लेकिन अगर मैं वानहांग के वेटपिड में कोई विकल्प जोड़ता हूं, तो कोई विकल्प समाप्त होने पर तत्काल बाहर निकलने का विकल्प कहता है ... ये बेहद भ्रमित लगता है।प्रतीक्षापिड, wnohang, wuntraced। मैं इन

मैं कंप्यूटर को बाल प्रक्रियाओं को समाप्त करने के लिए क्यों कहूंगा और फिर तुरंत बाद में बाहर निकलने के लिए कहूं अगर कोई भी बच्चा समाप्त नहीं हुआ है?

क्या कोई इस विकल्प और वांछित विकल्पों को समझा सकता है? मुझे नहीं पता कि इसका पता लगाने का क्या अर्थ है।

+0

pid = -1 का मतलब है * किसी * बच्चे के लिए इंतजार करना, उन सभी में से नहीं। और "प्रतीक्षा" एक तकनीकी शब्द है, जिसका अर्थ है 'प्रतीक्षा करें (2) '। – melpomene

+0

@melpomene आह, हाँ कोई और सभी बहुत अलग हैं। सुधारों के लिए धन्यवाद। मान लें कि मेरे पास 3 बच्चे हैं ... कंप्यूटर कैसे निर्धारित करता है कि किसके लिए इंतजार करना है? या यह पहली बार ऐसी चीज है जहां बच्चों में से एक खत्म हो जाता है तो कंप्यूटर तकनीकी रूप से इंतजार कर रहा है और आगे बढ़ता है? – 8this

+0

@ 8this यदि आप '-1' का एक पिड पास करते हैं, तो यह * सभी * बच्चों को समाप्त करने की प्रतीक्षा नहीं करता है, यह * किसी * बच्चे को समाप्त करने की प्रतीक्षा करता है। एक बार जब कोई बच्चा खत्म हो जाए, तो इसकाटा जा रहा है। – fuz

उत्तर

2

यदि आप -1 और WNOHANG पास करते हैं, waitpid() जांच करेगा कि कोई ज़ोंबी-बच्चे मौजूद हैं या नहीं। यदि हां, उनमें से एक काटा जाता है और इसकी निकास स्थिति वापस आती है। यदि नहीं, तो 0 वापस कर दिया गया है (यदि अप्रतिबंधित बच्चे मौजूद हैं) या -1 लौटाया गया है (यदि नहीं) और ERRNOECHILD (कोई बच्चा प्रक्रिया नहीं) पर सेट है। यह उपयोगी है अगर आप यह जानना चाहते हैं कि हाल ही में आपके किसी भी बच्चे को मरने के लिए इंतजार किए बिना मर गया है या नहीं। यह इस संबंध में बहुत उपयोगी है।

विकल्प WUNTRACED नीचे के रूप में दर्ज है, मैं इस विवरण में जोड़ने के लिए कुछ भी नहीं है:

WUNTRACED   किसी भी बच्चे की प्रक्रिया पीआईडी ​​द्वारा निर्दिष्ट है कि बंद कर दिया जाता है, और जिसकी स्थिति अभी तक सूचना नहीं किया गया है की स्थिति चूंकि वे रुक गए, अनुरोध प्रक्रिया को भी सूचित किया जाएगा।

अधिक जानकारी के लिए POSIX से waitpid पृष्ठ पढ़ें।

13

आप आमतौर पर विभिन्न मामलों में WNOHANG और WUNTRACED का उपयोग करते हैं।

केस 1: मान लीजिए कि आपके पास ऐसी प्रक्रिया है जो बच्चों के समूह से निकलती है और बच्चों को चलने के दौरान अन्य सामान करने की आवश्यकता होती है। ये बच्चे कभी-कभी बाहर निकलते हैं या मारे जाते हैं, लेकिन कर्नेल उनके बाहर निकलने की स्थिति पर तब तक रहेगा जब तक कि कुछ अन्य प्रक्रिया इसे प्रतीक्षा() या waitpid() के माध्यम से दावा न करे। इसलिए, आपके माता-पिता को कर्नेल को बच्चे के अवशेषों से छुटकारा पाने के लिए अवसर पर प्रतीक्षा()/waitpid() पर कॉल करने की आवश्यकता है। लेकिन हम प्रतीक्षा नहीं करना चाहते हैं()/waitpid() से ब्लॉक, क्योंकि, इस मामले में, हमारी प्रक्रिया में अन्य चीजें हैं जिन्हें इसे करने की आवश्यकता है। हम अगर पर किसी मृत प्रक्रिया की स्थिति एकत्र करना चाहते हैं तो कोई भी है। वनोहन के लिए यही है। यह अवरुद्ध करने से प्रतीक्षा()/waitpid() को रोकता है ताकि आपकी प्रक्रिया अन्य कार्यों के साथ चल सके। अगर कोई बच्चा मर गया, तो उसकी पिड प्रतीक्षा()/प्रतीक्षापिड() द्वारा वापस कर दी जाएगी और आपकी प्रक्रिया उस पर कार्य कर सकती है। यदि कुछ भी नहीं मर गया, तो लौटा हुआ पिड 0.

केस 2: मान लीजिए कि आपकी मूल प्रक्रिया कुछ भी करना चाहती है जबकि बच्चे चल रहे हैं। आप सिर्फ कुछ थंब-ट्विडिंग फॉर-लूप नहीं करना चाहते हैं, इसलिए आप WNOHANG के बिना सामान्य प्रतीक्षा()/waitpid() का उपयोग करते हैं। जब तक बच्चों में से एक मर जाता है तब तक आपकी प्रक्रिया निष्पादन कतार से बाहर की जाती है। लेकिन क्या होगा यदि आपके बच्चों में से एक को सिगस्टॉप के माध्यम से रोक दिया गया है? आपका बच्चा अब उस कार्य पर काम नहीं कर रहा है जिसे आपने इसे सेट किया है, लेकिन माता-पिता अभी भी प्रतीक्षा कर रहा है। तो, आपको एक अर्थ में एक डेडलॉक मिल गया है, जब तक कि बच्चे आपके माता-पिता और उस बच्चे के बाहर कुछ माध्यमों से जारी न हो। WUNTRACED आपके माता-पिता को प्रतीक्षा()/waitpid() से वापस लौटने की अनुमति देता है यदि कोई बच्चा बंद हो गया है और साथ ही बाहर निकला या मार रहा है। इस तरह, आपके माता-पिता को इसे जारी रखने के लिए इसे एक सिगकंट भेजने का मौका मिला है, इसे मार डालो, अपने कार्यों को दूसरे बच्चे को सौंपा जाए।

संबंधित मुद्दे