shmctl

2013-03-24 7 views
12

के साथ साझा मेमोरी सेगमेंट को हटाकर मैं shmctl() के लिए लिनक्स man pages द्वारा उलझन में हूं। मैं निम्न आदेश का उपयोग करता हूं: साझा खंड को हटाने के लिए shmctl (id , IPC_RMID , 0)man pages स्मृति के जीवनकाल के बारे में खुद को विरोधाभास प्रतीत होता है।shmctl

man pages राज्य:

IPC_RMID

मार्क खंड नष्ट हो। पिछली प्रक्रिया को अलग करने के बाद सेगमेंट वास्तव में नष्ट हो जाएगा (यानी, संबंधित संरचना shm_nattch सदस्य shmid_ds शून्य है)। कॉलर स्वामी या निर्माता होना चाहिए, या विशेषाधिकार प्राप्त होना चाहिए। यदि खंड को विनाश के लिए चिह्नित किया गया है, तो संबंधित डेटा संरचना में shm_perm.mode फ़ील्ड के (गैर मानक) SHM_DEST ध्वज को IPC_STAT द्वारा पुनर्प्राप्त किया जाएगा।

अगर मैं सही हूँ, मेरा मानना ​​है कि इसका मतलब है अगर आप दो प्रक्रियाओं है कि दोनों साझा स्मृति में संलग्न है, (उनमें Process1 और Process2 फोन की सुविधा देता है), Process1 साझा स्मृति बना सकते हैं, देते हैं, अलग, नष्ट साझा स्मृति, और अंततः समाप्त। तब स्मृति तब भी मौजूद रहेगी जब तक Process2 भी अलग नहीं हो जाती।

क्या यह सही है?

दूसरे, क्या में इस बयान करता है man pages मतलब:

कॉलर सुनिश्चित करना चाहिए कि एक खंड अंत में नष्ट हो जाता है; अन्यथा इसके पृष्ठ जो गलती में थे, स्मृति में बने रहेंगे या स्वैप।

यह Process1 की तरह लगता है, के बाद से इसे हटाने के लिए खंड में चिह्नित, जब तक सभी अन्य प्रक्रियाओं के क्रम स्मृति नष्ट कर दिया जाता है सुनिश्चित करने के लिए अलग कर रहे हैं ब्लॉक करने के लिए की आवश्यकता होगी बनाता है। लेकिन ऐसा लगता है कि उपरोक्त कथन का खंडन है। मुझे यह भी नहीं पता कि यह कैसे किया जाएगा (यदि यह किया जाना चाहिए), तो यदि ऐसा है, तो क्या आप यह भी समझा सकते हैं कि मैं इसके बारे में कैसे जाऊंगा।

उत्तर

15

आपका पहला तर्क सही है। साझा खंड दोनों तक मौजूद रहेगा: इसे IPC_RMID के साथ चिह्नित किया गया है और अंतिम प्रक्रिया अलग हो जाती है।

दूसरे खंड का उद्देश्य आपको याद दिलाना है, कि साझा स्मृति का उपयोग करने के समाधान में आपको कुछ प्रक्रिया को विनाश के लिए चिह्नित करना होगा या यह स्मृति/स्वैप में हमेशा के लिए रहेगा। सेगमेंट बनाने के तुरंत बाद IPC_RMID का उपयोग करना अच्छा विचार हो सकता है।

यदि आप सुनिश्चित नहीं हैं कि आपने सफलतापूर्वक स्मृति जारी की है, तो आप शेष खंडों को सूचीबद्ध करने के लिए ipcs प्रोग्राम का उपयोग कर सकते हैं।