Durch das Aufheben der Verknüpfung der Datei in /dev/shm
wird das Shared Memory-Objekt gelöscht, wenn keinem anderen Prozess das Objekt zugeordnet ist.
Im Gegensatz zum gemeinsamen SYSV-Speicher, der im Kernel implementiert ist, sind POSIX-Shared-Memory-Objekte einfach "verschleierte Dateien".
Wenn Sie shm_open und mmap aufrufen, können Sie die folgenden im Prozess Prozesslandkarte sehen (mit pmap -X
):
Address Perm Offset Device Inode Mapping
b7737000 r--s 00000000 00:0d 2267945 test_object
Das Gerät Haupt- und Nebennummer entsprechen den tmpfs bei /dev/shm
montiert (einige Systeme montieren dies at/run, und dann symlink /dev/shm
zu /run/shm
).
Eine Auflistung des Ordners wird die gleiche Inode-Nummer zeigen:
$ ls -li /dev/shm/
2267945 -rw------- 1 mikel mikel 1 Apr 14 13:36 test_object
Wie jede andere Inode, wird der Raum freigegeben werden, wenn alle Referenzen entfernt werden. Wenn wir das einzige Programm, verweisen diese schließen wir sehen:
$ cat /proc/meminfo | grep Shmem
Shmem: 700 kB
Sobald wir die letzte Referenz (erstellt in /dev/shm
) entfernen, wird der Raum befreit werden:
$ rm /dev/shm/test_object
$ cat /proc/meminfo | grep Shmem
Shmem: 696 kB
Wenn Sie sind neugierig, Sie kann die entsprechenden Dateien in den glibc-Quellen betrachten. shm_directory.c und shm_directory.h erzeugen Sie den Dateinamen als /dev/your_shm_name
. Die Implementierungen shm_open und shm_unlink öffnen und entkoppeln einfach diese Datei. So sollte es leicht zu sehen sein, dass rm /dev/shm/your_shm_name
führt die gleiche Operation,
Versuchen Sie unix.stackexchange.com oder superuser.com für nicht-Programmierung Fragen. – Barmar
@Barmar Das scheint mir eine sehr ähnliche Frage zu sein, die ich verlinkt habe. Es könnte so umformuliert werden wie "Kann shared memory Objekte, die über' shm_open' erstellt wurden, entfernt werden, indem man die entsprechende Datei in '/ dev/shm /'? " aber ich denke, das ist ein sehr kleiner Unterschied. Ich glaube nicht, dass diese Frage nicht mehr programmierungsbezogen ist, nur weil ich lieber vorhandene \ * nix-Tools wiederverwenden möchte, als das Rad neu zu erfinden. Ich glaube nicht, dass der Grund für die Abstimmung gut ist, weil "shm_open" definitiv "hauptsächlich für die Programmierung verwendet wird", nicht ein "Allzweck-Computer-Tool". –