Untuk berjaga-jaga jika seseorang hanya tertarik pada proses seperti apa yang menciptakan moeries bersama, hubungi
ls -l /dev/shm
Itu mencantumkan nama-nama yang terkait dengan memori bersama - setidaknya di Ubuntu. Biasanya namanya cukup jitu.
Saya rasa Anda tidak dapat melakukan ini dengan alat standar. Anda dapat menggunakan ipcs -mp
untuk mendapatkan ID proses terakhir proses untuk melampirkan/melepaskan tetapi saya tidak mengetahui cara mendapatkan semua proses terlampir dengan ipcs
.
Dengan segmen yang terhubung dengan dua proses, dengan asumsi keduanya tetap terlampir, Anda mungkin dapat mengetahuinya dari PID pembuat cpid
dan PID lpid
yang dipasang terakhir yang merupakan dua proses tetapi itu tidak akan menskalakan lebih dari dua proses sehingga kegunaannya terbatas.
cat /proc/sysvipc/shm
metode tampaknya juga terbatas tetapi saya yakin ada cara untuk melakukannya dengan bagian lain dari /proc
sistem file, seperti yang ditunjukkan di bawah ini:
Ketika saya melakukan grep
pada procfs
peta untuk semua proses, saya mendapatkan entri yang berisi baris untuk cpid
dan lpid
proses.
Misalnya, saya mendapatkan segmen memori bersama berikut dari ipcs -m
:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
dan, dari ipcs -mp
, cpid
adalah 3956 dan lpid
adalah 9999 untuk segmen memori bersama yang diberikan (123456).
Lalu, dengan perintah grep 123456 /proc/*/maps
, saya mengerti:
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
Jadi ada adalah cara untuk mendapatkan proses yang melekat padanya. Saya cukup yakin bahwa dest
status dan (deleted)
indikatornya adalah karena pembuat telah menandai segmen untuk dihancurkan setelah pelepasan terakhir terjadi, bukan karena telah dihancurkan.
Jadi, dengan memindai /proc/*/maps
"files", Anda seharusnya dapat menemukan PID mana yang saat ini dilampirkan ke segmen tertentu.
Saya menulis sebuah alat yang disebut who_attach_shm.pl, itu mem-parsing /proc/[pid]/maps untuk mendapatkan informasinya. Anda dapat mengunduhnya dari github
contoh keluaran:
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
berikan contoh Anda di atas - untuk menemukan proses yang dilampirkan ke shmid 98306
lsof | egrep "98306|COMMAND"