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