3
我使用shmget
,shmat
和shmctl
分別獲取並創建共享內存段,將其附加到進程地址空間中並將其刪除。乾淨地銷燬系統V共享內存段
我想知道如果進程仍然可以使用共享內存段,即使它已經被拆卸並在一個過程中使用
shmctl(id, IPC_RMID, ...)
要求拆除。
我無法從該名男子頁得到的信息:
IPC_RMID
標記段被破壞。該段只會在最後一個進程分離後才被實際銷燬(即shm_nattch
關聯結構的成員shmid_ds
爲零)。來電者必須是所有者或創作者,或享有特權。如果段已標記爲銷燬,則將設置由IPC_STAT
檢索的關聯數據結構中的(非標準)字段的標誌。
即使您仍然可以使用它,您如何知道其他進程在您使用它時不會分離(並因此銷燬)該段? –
@FrédéricHamidi我不明白你的意見。這是否意味着答案是肯定的?你能解釋一下嗎? –
答案是肯定的,如果請求銷燬的進程沒有將細分後來分離,但是從你的問題看,你已經知道了。所以我假設你想知道在請求銷燬和分離之後,是否仍然可以使用'shmat()'映射的地址。因此,我的評論。 –