Linux – проверка процессов с использованием IPC-каналов

Это связано с моим предыдущим вопросом .

Учитывая, что я могу найти статистику каналов IPC в своей системе Linux (например, sys V IPC), как я могу определить, какие процессы используют определенный канал IPC (отправка по каналу, приемники обычно упоминаются в командных выводе).

Например, ipcs дает мне список общих идентификаторов mem на машине. Как я могу найти, какие процессы используют эту общую память?

Мне интересны другие IPC (это команды, которые я использовал для поиска статистики):

  • Трубы: lsof | grep pipe lsof | grep pipe
  • UNIX Сокеты домена: netstat -n

    Вы также используете ipcs , но добавляете дополнительные опции:

     wouter@gangtai:~$ ipcs ------ Message Queues -------- key msqid owner perms used-bytes messages ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x0052e2c1 32768 postgres 600 56 20 0x00000000 17924097 wouter 600 33554432 2 dest 0x00000000 49446914 wouter 600 524288 2 dest [...] wouter@gangtai:~$ ipcs -i 17924097 -m -p Shared memory Segment shmid=17924097 uid=1000 gid=1000 cuid=1000 cgid=1000 mode=01600 access_perms=0600 bytes=33554432 lpid=3808 cpid=1457 nattch=2 att_time=Fri Jul 3 10:43:28 2015 det_time=Fri Jul 3 10:43:28 2015 change_time=Fri Jul 3 10:03:00 2015 

    lpid – это lpid «последнего доступа»; cpid – это «создатель» PID.

    Параметру -i требуется идентификатор объекта IPC (сегмент разделяемой памяти, очередь сообщений или семафор), который вы хотите проверить. Флаг -m – это то, что мы проверяем сегмент памяти, а -p говорит, что мы хотим видеть идентификаторы процессов.

    См. man ipcs для полной истории.