Jestem zdezorientowany linuxem man pages
dla shmctl()
. Używam następującego polecenia: shmctl (id , IPC_RMID , 0)
, aby usunąć udostępniony segment. man pages
wydaje się zaprzeczać samej pamięci życia.Usuwanie segmentu pamięci współużytkowanej za pomocą shmctl
man pages stan:
IPC_RMID
Mark segment zostać zniszczone. Segment zostanie faktycznie zniszczony dopiero po odjęciu ostatniego procesu (tj. Gdy członek shm_nattch powiązanej struktury shmid_ds ma wartość zero). Dzwoniący musi być właścicielem lub twórcą lub być uprzywilejowanym. Jeśli segment został oznaczony do zniszczenia, wówczas zostanie ustawiona (niestandardowa) flaga SHM_DEST pola shm_perm.mode w powiązanej strukturze danych pobranej przez IPC_STAT.
Jeśli jestem poprawny, wierzę, że to oznacza, że jeśli masz dwa procesy, które zarówno dołączyć do pamięci współdzielonej (Nazwijmy je Process1
i Process2
) Process1
może utworzyć pamięci współdzielonej, załączyć, odłączyć, niszczyć wspólne pamięć, a ostatecznie zakończyć. Wtedy pamięć nadal będzie istniała do momentu, aż Process2
się odłączy.
Czy to prawda?
Po drugie, co to oświadczenie w man pages
myśli:
Rozmówca musi zapewnić, że segment jest ostatecznie zniszczone; W przeciwnym razie jego strony, do których doszło, pozostaną w pamięci lub zamienią się na .
To sprawia, że wydaje się Process1
, gdyż oznaczała segment do usunięcia, musiałaby zablokować aż wszystkie inne procesy są odłączane w celu zapewnienia pamięci zostanie usunięty. Ale wydaje się to sprzeczne z powyższym stwierdzeniem. Nie mam też pojęcia, jak to się robi (jeśli ma to być zrobione), więc jeśli tak jest, czy mógłbyś również wyjaśnić, jak to zrobię.