Juste au cas où quelqu'un ne s'intéresse qu'au type de processus qui a créé les moeries partagées, appelez
ls -l /dev/shm
Il répertorie les noms associés aux mémoires partagées - du moins sur Ubuntu. Habituellement, les noms sont assez parlants.
Je ne pense pas que vous puissiez le faire avec les outils standard. Vous pouvez utiliser ipcs -mp
pour obtenir l'ID de processus du dernier processus pour attacher/détacher mais je ne sais pas comment obtenir tous processus attachés avec ipcs
.
Avec un segment attaché à deux processus, en supposant qu'ils restent tous les deux ci-joint, vous pouvez éventuellement déterminer à partir du créateur PID cpid
et le dernier PID attaché lpid
qui sont les deux processus, mais qui ne s'adaptera pas à plus de deux processus, son utilité est donc limitée.
Le cat /proc/sysvipc/shm
la méthode semble également limitée mais je pense qu'il existe un moyen de le faire avec d'autres parties du /proc
système de fichiers, comme indiqué ci-dessous :
Quand je fais un grep
sur le procfs
cartes pour tous les processus, j'obtiens des entrées contenant des lignes pour le cpid
et lpid
processus.
Par exemple, j'obtiens le segment de mémoire partagée suivant de ipcs -m
:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
et, à partir de ipcs -mp
, le cpid
est 3956 et le lpid
est 9999 pour ce segment de mémoire partagée donné (123456).
Puis, avec la commande grep 123456 /proc/*/maps
, je vois :
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
Donc il y a un moyen d'obtenir les processus qui s'y rattachent. Je suis à peu près certain que le dest
statut et (deleted)
sont parce que le créateur a marqué le segment pour destruction une fois le détachement final effectué, et non qu'il a déjà été détruit.
Ainsi, en scannant le /proc/*/maps
"fichiers", vous devriez être en mesure de découvrir quels PID sont actuellement attachés à un segment donné.
J'ai écrit un outil appelé who_attach_shm.pl, il analyse /proc/[pid]/maps pour obtenir les informations. Vous pouvez le télécharger depuis github
exemple de sortie :
shm attach process list, group by shm key
##################################################################
0x2d5feab4: /home/curu/mem_dumper /home/curu/playd
0x4e47fc6c: /home/curu/playd
0x77da6cfe: /home/curu/mem_dumper /home/curu/playd /home/curu/scand
##################################################################
process shm usage
##################################################################
/home/curu/mem_dumper [2]: 0x2d5feab4 0x77da6cfe
/home/curu/playd [3]: 0x2d5feab4 0x4e47fc6c 0x77da6cfe
/home/curu/scand [1]: 0x77da6cfe
étant donné votre exemple ci-dessus - pour trouver les processus attachés à shmid 98306
lsof | egrep "98306|COMMAND"