Есть ли способ перехватить межпроцессное взаимодействие в Unix / Linux?

Для перехвата / анализа сетевого трафика у нас есть утилита Wireshark .

У нас есть аналогичная утилита для перехвата всей межпроцессной связи между любыми двумя процессами в Unix / Linux?

Я создал некоторые процессы в памяти, и мне нужно рассказать, как они общаются друг с другом.

  • Преимущества использования именованных каналов и сокетов, а не временных файлов
  • dbus-запуск и dbus-демон - что происходит
  • `/ proc / $ PID / cwd`: есть ли эквивалент POSIX?
  • процесс ожидания семафора
  • Различия между доменными сокетами Unix и сетевыми сокетами?
  • Как реализовать «генераторы», такие как $ RANDOM?
  • Как определить способ подключения, используемый клиентом MySQL?
  • Предотвращение блокировки экрана ChromeOS при работе с другим типом
  • 2 Solutions collect form web for “Есть ли способ перехватить межпроцессное взаимодействие в Unix / Linux?”

    Это сильно зависит от механизма связи.

    • В самом прозрачном конце спектра процессы могут взаимодействовать с использованием интернет-сокетов (например, IP ). Затем wirehark или tcpdump могут отображать весь трафик, указывая его на интерфейс loopback.

    • На промежуточном уровне движение по трубам и разъемам unix можно наблюдать с помощью truss / strace / trace / …, швейцарской армейской цепной системы для отслеживания системы. Это может значительно замедлить процессы, поэтому может оказаться непригодным для профилирования.

    • На самом непрозрачном конце спектра есть разделяемая память. Основной принцип работы разделяемой памяти заключается в том, что в каждом задействованном процессе доступ полностью прозрачен, вам нужно только системные вызовы для настройки разделяемых областей памяти. Отслеживание этих обращений к памяти извне было бы затруднительным, особенно если вам нужно наблюдение, чтобы не нарушить время. Вы можете попробовать такие инструменты, как инструментарий трассировки Linux (требуется патч ядра) и посмотреть, можно ли извлечь полезную информацию; это та область, где я ожидаю, что Solaris будет иметь лучший инструмент (но я не знаю об этом).

      Если у вас есть источник, лучшим вариантом может быть добавление инструкций трассировки к ключевым функциям библиотеки. Это может быть достигнуто с помощью трюков LD_PRELOAD даже если у вас нет (цельного) источника, если у вас достаточно понимание потока управления частью программы, которая обращается к общей памяти.

    Это покажет, что процесс читает и пишет:

     strace -ewrite -p $PID 

    Это не чистый результат (показывает строки вроде: write (#,)), но работает! (и является однострочным: D) Возможно, вам также не понравится тот факт, что аргументы сокращены. Для управления этим параметром -s, который устанавливает максимальную длину строк.

    Он захватывает все потоки, поэтому вы можете каким-то образом отфильтровать их.

    Вы можете отфильтровать его:

     strace -ewrite -p $PID 2>&1 | grep "write(1" 

    показывает только вызовы дескриптора 1. 2> & 1 – перенаправить stderr на stdout, поскольку strace записывает stderr по умолчанию.

    Interesting Posts

    Как rsync файлы с номером имени файла больше, чем число?

    Как я могу найти все файлы, чье имя начинается с «tty» в каталоге / dev со всей информацией о файлах?

    Переместить / в новый раздел

    Почему у моего нового Debian высокая латентность?

    Подсчитайте количество вхождений значения столбца в TSV-файл с AWK

    Grep несколько шаблонов и напечатать различное количество строк ниже каждого из шаблонов?

    Кто отрезает первый символ файла замещения процесса и по какой причине?

    Распаковка с помощью tar: – слишком жадничать: как исключить только файл на уровне корневого уровня?

    Arch Linux: неудовлетворенные зависимости: open-vm-tools-modules требует linux <3.10

    Bash не будет выполнять файлы

    Поиск MFLOPS с использованием Linux

    архив git, включая незафиксированные измененные файлы

    Как установить пакет объявлений в Kubuntu для LaTeX?

    chmod не будет работать – нет сообщения об ошибке

    RHEL6 Не удалось загрузить файл кикстарта

    Linux и Unix - лучшая ОС в мире.