GNU/Linux >> Znalost Linux >  >> Linux

Jak vypsat seznam procesů připojených k segmentu sdílené paměti v linuxu?

Pro případ, že by někoho zajímalo pouze to, jaký proces vytvořil sdílené moeries, zavolejte

ls -l /dev/shm

Uvádí jména, která jsou spojena se sdílenými vzpomínkami - alespoň na Ubuntu. Obvykle jsou jména docela výmluvná.


Nemyslím si, že to můžete udělat se standardními nástroji. Můžete použít ipcs -mp získat ID procesu posledního proces připojit/odpojit, ale nevím, jak získat vše připojené procesy s ipcs .

Se segmentem připojeným ke dvěma procesům, za předpokladu, že oba zůstali přiloženo, můžete případně zjistit z PID tvůrce cpid a naposledy připojený PID lpid což jsou dva procesy, které se však neškálují na více než dva procesy, takže jeho užitečnost je omezená.

cat /proc/sysvipc/shm metoda se zdá podobně omezená, ale věřím, že existuje způsob, jak to udělat s jinými částmi /proc souborový systém, jak je uvedeno níže:

Když udělám grep na procfs map pro všechny procesy, dostávám záznamy obsahující řádky pro cpid a lpid procesy.

Například dostanu následující segment sdílené paměti z ipcs -m :

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 123456     pax        600        1024       2          dest

a od ipcs -mp , cpid je 3956 a lpid je 9999 pro daný segment sdílené paměti (123456).

Poté pomocí příkazu grep 123456 /proc/*/maps , vidím:

/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)

Takže existuje způsob, jak získat procesy, které jsou k němu připojeny. Jsem si docela jistý, že dest stav a (deleted) Indikátory jsou proto, že tvůrce označil segment ke zničení, jakmile dojde ke konečnému odpojení, nikoli že již byl zničen.

Takže skenováním /proc/*/maps "files", měli byste být schopni zjistit, které PID jsou aktuálně připojeny k danému segmentu.


Napsal jsem nástroj nazvaný who_attach_shm.pl, analyzuje /proc/[pid]/maps, aby získal informace. Můžete si jej stáhnout z github

ukázkový výstup:

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

vzhledem k vašemu příkladu výše - najít procesy připojené k shmid 98306

lsof | egrep "98306|COMMAND"

Linux
  1. Jak vymazat mezipaměť v Linuxu

  2. Jak mohu získat seznam dostupných bezdrátových sítí v systému Linux?

  3. Jak získám upozornění na chyby ECC v Linuxu?

  1. Jak používat příkaz Linux SS

  2. Jak používat sdílenou paměť s Linuxem v C

  3. Jak Linux přiděluje šířku pásma mezi procesy?

  1. Jak vypsat běžící procesy v Linuxu

  2. Jak vypsat seznam běžících procesů v Linuxu:Průvodce pro začátečníky

  3. Jak vypsat seznam uživatelů v Linuxu