Suppression d'un segment de mémoire partagée avec shmctl

Je suis déconcerté par le linux man pages pour shmctl(). J'utilise la commande suivante: shmctl (id , IPC_RMID , 0) pour supprimer un segment partagé. Le man pages semblent contredire lui-même à propos de la mémoire de la vie.

La les pages de manuel état:

IPC_RMID

Marque le segment à être détruit. Le segment ne sera détruite après le dernier processus détache (c'est à dire, lorsque l'
shm_nattch membre de la structure shmid_ds est égale à zéro). L'
l'appelant doit être le propriétaire ou le créateur, ou être privilégié. Si un segment
a été marqué pour la destruction, puis la (non standard) SHM_DEST drapeau
de la shm_perm.le mode de champ dans la structure de données récupérées
par IPC_STAT.

Si je suis correct, je crois que cela signifie que si vous avez deux processus qui se raccordent à la mémoire partagée, (appelons les Process1 et Process2), Process1 pourrait créer la mémoire partagée, l'attacher, détacher, de détruire la mémoire partagée, et, finalement, mettre fin. Puis la mémoire continuera d'exister jusqu'à ce que Process2 également se détache.

Est-ce correct?

Deuxièmement, ce que fait cette déclaration dans le man pages dire:

L'appelant doit veiller à ce qu'un segment est finalement détruit;
sinon, les pages qui ont été blâmés en restera dans la mémoire ou
swap.

De ce fait, il semble comme Process1car il a marqué le segment de la suppression, il serait nécessaire de bloquer jusqu'à ce que tous les autres processus sont détachés afin d'assurer la mémoire est supprimé. Mais ce qui semble en contradiction avec la déclaration ci-dessus. Je n'ai aucune idée de comment cela sera fait (si c'est censé être fait), donc, si c'est le cas, pourrais-tu expliquer comment je pourrais aller à ce sujet.

source d'informationauteur MrHappyAsthma | 2013-03-24