Nel caso in cui qualcuno sia interessato solo al tipo di processo che ha creato le moerie condivise, chiama
ls -l /dev/shm
Elenca i nomi associati ai ricordi condivisi, almeno su Ubuntu. Di solito i nomi sono abbastanza eloquenti.
Non penso che tu possa farlo con gli strumenti standard. Puoi usare ipcs -mp
per ottenere l'ID processo dell'ultimo processo per allegare/scollegare ma non sono a conoscenza di come ottenere tutto processi collegati con ipcs
.
Con un segmento associato a due processi, supponendo che entrambi rimangano allegato, puoi eventualmente capire dal creatore PID cpid
e PID ultimo allegato lpid
quali sono i due processi ma che non si ridurrà a più di due processi quindi la sua utilità è limitata.
Il cat /proc/sysvipc/shm
metodo sembra similmente limitato ma credo che ci sia un modo per farlo con altre parti del /proc
filesystem, come mostrato di seguito:
Quando eseguo un grep
sul procfs
maps per tutti i processi, ottengo voci contenenti righe per cpid
e lpid
processi.
Ad esempio, ottengo il seguente segmento di memoria condivisa da ipcs -m
:
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
e, da ipcs -mp
, il cpid
è 3956 e lpid
è 9999 per quel dato segmento di memoria condivisa (123456).
Quindi, con il comando grep 123456 /proc/*/maps
, vedo:
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
Quindi c'è un modo per ottenere i processi ad esso collegati. Sono abbastanza sicuro che il file dest
stato e (deleted)
l'indicatore è dovuto al fatto che il creatore ha contrassegnato il segmento per la distruzione una volta avvenuto il distacco finale, non che sia già stato distrutto.
Quindi, scansionando il file /proc/*/maps
"files", dovresti essere in grado di scoprire quali PID sono attualmente collegati a un dato segmento.
Ho scritto uno strumento chiamato who_attach_shm.pl, analizza /proc/[pid]/maps per ottenere le informazioni. Puoi scaricarlo da github
output di esempio:
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
dato il tuo esempio sopra - per trovare i processi collegati a shmid 98306
lsof | egrep "98306|COMMAND"