Ich bin verwirrt von der Linux man pages
für shmctl()
. Ich verwende den folgenden Befehl: shmctl (id , IPC_RMID , 0)
, um ein freigegebenes Segment zu entfernen. Die man pages
scheinen sich über die Lebensdauer des Speichers zu widersprechen.Shared Memory-Segment mit Shmctl löschen
Der man pages Zustand:
IPC_RMID
Mark das Segment zerstört werden. Das Segment wird nur tatsächlich zerstört, nachdem der letzte Prozess es gelöst hat (d. H. Wenn das Element shm_nattch der zugehörigen Struktur shmid_ds 0 ist). Der Anrufer muss der Eigentümer oder Ersteller sein oder privilegiert sein. Wenn ein Segment zur Vernichtung markiert wurde, wird das (nicht standardmäßige) SHM_DEST-Flag des Felds shm_perm.mode in der zugehörigen Datenstruktur, die von IPC_STAT mit abgerufen wurde, gesetzt.
Wenn ich richtig bin, glaube ich, das bedeutet, wenn Sie zwei Prozesse, die sowohl in den gemeinsamen Speicher anhängen, (lässt sie Process1
und Process2
nennen), Process1
den gemeinsam genutzten Speicher schaffen könnte, befestigen, lösen, zerstören die gemeinsame Speicher und schließlich zu beenden. Dann wird der Speicher noch existieren, bis sich Process2
ebenfalls löst.
Ist das korrekt?
Zweitens: Was bedeutet diese Aussage in der man pages
Mittelwert:
Der Anrufer muss sicherstellen, dass ein Segment schließlich zerstört wird; andernfalls bleiben die fehlerhaften Seiten im Speicher oder tauschen.
Dies macht es wie Process1
erscheinen, da es das Segment zum Löschen markiert, brauchen würde, bis alle anderen Prozesse um sind frei stehend zu blockieren, den Speicher zu gewährleisten, wird gelöscht. Dies scheint jedoch der obigen Aussage zu widersprechen. Ich habe auch keine Ahnung, wie das gemacht würde (wenn es gemacht werden sollte), also wenn das der Fall ist, könntest du auch erklären, wie ich das machen würde.