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

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

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

  • Обработка каждой строки из текстового файла и удаление связанных файлов с диска
  • no null в ошибке / dev
  • Как подключиться к Wi-Fi, используя nmcli со статическим IP-адресом и паролем?
  • cURL доступ к сайту HTTPS
  • Понимание управляющего терминала
  • Сохранить код выхода для последующего
  • Я создал некоторые процессы в памяти, и мне нужно рассказать, как они общаются друг с другом.

  • Используя арифметическое расширение bash «double paren», математика выходит из строя с начальным нулем
  • Сортировка вывода поиска до трубопровода в openssh
  • Возврат к ошибке в shellscript вместо выхода при ошибке
  • извлечь среднюю часть строк текстового файла?
  • Есть ли стандартная команда, которая всегда выходит с ошибкой?
  • Автозаполнение слов из буферного терминала
  • 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 по умолчанию.

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