2011-05-16 8 views
25

मेरे पास एक ऐसा प्रोग्राम है जो एक टीसीपी सर्वर के रूप में कार्य करता है जो उदाहरण के लिए पोर्ट 5000 को सुनता है।फोर्क प्रक्रिया में सॉकेट कनेक्शन को कैसे संभाला जा रहा है

अब मैं इस सर्वर के साथ समानांतर में चलाने के लिए एक और कमांड लाइन प्रक्रिया चलाने के लिए चाहता हूं। मुझे पता है कि इसे "निष्पादित" कॉल करने के बजाय सर्वर को फोर्क करना सही तरीका है ....

मेरा सवाल यह है कि क्या बाल प्रक्रिया भी इस पोर्ट 5000 का "मालिक" है? अगर मैं इस बंदरगाह 5000 को जारी करना चाहता हूं, तो क्या मुझे माता-पिता की प्रक्रिया और बाल प्रक्रिया दोनों को मारने की ज़रूरत है?

मैं बहुत उत्सुक हूं कि फोर्किंग में इस सॉकेट कनेक्शन को कैसे संभाला जा रहा है।

+0

क्या आप फोर्क() करते हैं जब कोई नया कनेक्शन आने वाला या उससे पहले होता है? – Simone

+0

@ सिमोन, मैं एक नए कनेक्शन के बाद कांटा बनाया गया है। – CodeNoob

+0

@ushfish तो मैट का जवाब सही है। – Simone

उत्तर

20
  1. पहले, accept() आने वाले कनेक्शन। स्वीकार्य प्रक्रिया में अब सुनवाई सॉकेट, और नए स्वीकृत सॉकेट के लिए एक हैंडल है।
  2. कांटा और:
    • बच्चे में:
      1. बंद सुन सॉकेट।
      2. स्वीकृत सॉकेट के साथ सामान करें।
    • माता-पिता में:
      1. स्वीकार किए जाते हैं सॉकेट बंद करें।
      2. स्वीकृति पाश फिर से शुरू करें।

जब संभाल के सभी संदर्भ बंद हो जाती हैं विभिन्न सॉकेट संसाधनों पुनः दावा किया जाएगा। यदि कोई प्रक्रिया समाप्त हो जाती है, तो उसके सभी हैंडल पूरी तरह बंद हो जाते हैं। इसलिए यदि कोई बच्चा हैंडल को बंद करता है तो उसे सुनवाई सॉकेट में विरासत मिलती है, तो उस सॉकेट में शेष एकमात्र हैंडल माता-पिता में मौजूद होता है। फिर माता-पिता को समाप्त होने पर सुनवाई सॉकेट को पुनः दावा किया जाएगा, या इस संभाल को स्पष्ट रूप से बंद कर दिया जाएगा।

13

हां, यह
जब भी कोई बच्चा प्रक्रिया बनाई जाती है, तो उसे मूल प्रक्रिया से फ़ाइल डिस्क्रिप्टर तालिका की प्रति प्राप्त होती है। और प्रत्येक फ़ाइल डिस्क्रिप्टर के अनुरूप एक संदर्भ संख्या है, जो वर्तमान में फ़ाइल/सॉकेट तक पहुंचने वाली प्रक्रियाओं की संख्या है। इसलिए, यदि मास्टर प्रक्रिया में एक सॉकेट खुला है और एक बाल प्रक्रिया बनाई जाती है, तो संदर्भ गणना वृद्धि होती है, क्योंकि यह अब भी बाल प्रक्रिया में खुली है, और जब यह किसी भी प्रक्रिया में बंद हो जाती है, तो यह घट जाती है। जब संदर्भ गणना शून्य तक पहुंच जाती है तो अंततः एक सॉकेट बंद हो जाती है।

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