對於shmctl()
,我很困惑於linux man pages
。我使用以下命令:shmctl (id , IPC_RMID , 0)
刪除共享段。 man pages
似乎矛盾自己有關記憶的一生。用shmctl刪除共享內存段
的man pages狀態:
IPC_RMID
標記段被破壞。該段只會在最後一個進程分離後才被實際銷燬(即關聯結構shmid_ds的 shm_nattch成員爲零)。主叫方必須是所有者或創建者,或者有特權。如果段 已被標記爲銷燬,則將設置由IPC_STAT檢索到的關聯數據結構 中的shm_perm.mode字段的(非標準)SHM_DEST標誌 。
如果我是正確的,我相信這意味着如果你有兩個過程,這兩個附加到共享內存,(讓我們稱之爲Process1
和Process2
),Process1
可以創建共享內存,連接,分離,銷燬共享記憶,並最終終止。然後內存將仍然存在,直到Process2
也分離。
這是正確的嗎?
其次,請問這個說法在man pages
平均:
調用者必須確保段最終破壞; 否則其出現故障的頁面將保留在內存或 交換中。
這使得它看起來像Process1
,因爲它標記了要刪除的段,爲了確保內存被刪除,需要阻塞,直到所有其他進程都被分離爲止。但這似乎與上述說法相矛盾。我也不知道如何做到這一點(如果它應該完成),所以如果是這樣的話,你能否解釋我將如何去做這件事。