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"