誰かが共有モエリーを作成したプロセスだけに興味がある場合に備えて、呼び出してください
ls -l /dev/shm
少なくともUbuntuでは、共有メモリに関連付けられている名前がリストされています。通常、名前は非常にわかりやすいです。
標準のツールではこれを行うことはできないと思います。 ipcs -mp
を使用できます 最後ののプロセスIDを取得する 取り付け/取り外しのプロセスですが、すべてを取得する方法がわかりません ipcs
で添付されたプロセス .
2 つのプロセスが接続されたセグメントで、両方が残っていると仮定します。 作成者の PID cpid
からわかる可能性があります。 および最後に添付された PID lpid
これは 2 つのプロセスですが、2 つ以上のプロセスには拡張できないため、その有用性は限られています。
cat /proc/sysvipc/shm
メソッドも同様に制限されているように見えますが、 /proc
の他の部分でそれを行う方法があると思います 以下に示すファイルシステム:
grep
を実行すると procfs
で すべてのプロセスのマップ、 cpid
の行を含むエントリを取得します と lpid
たとえば、ipcs -m
から次の共有メモリ セグメントを取得します。 :
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 123456 pax 600 1024 2 dest
そして ipcs -mp
から 、cpid
は 3956 で、lpid
です その特定の共有メモリ セグメント (123456) では 9999 です。
次に、コマンド grep 123456 /proc/*/maps
で 、なるほど:
/proc/3956/maps: blah blah blah 123456 /SYSV000000 (deleted)
/proc/9999/maps: blah blah blah 123456 /SYSV000000 (deleted)
あります それに接続されているプロセスを取得する方法。 dest
が ステータスと (deleted)
インジケータは、作成者が最終的な分離が発生したときにセグメントを破棄するようにマークしたためであり、既に破棄されているわけではありません.
/proc/*/maps
をスキャンすることで "files" を使用すると、特定のセグメントに現在どの PID が関連付けられているかを検出できるはずです。
who_attach_shm.pl というツールを作成しました。これは /proc/[pid]/maps を解析して情報を取得します。github からダウンロードできます
出力例:
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
上記の例では、shmid 98306 に接続されているプロセスを検索します
lsof | egrep "98306|COMMAND"