Для перехвата / анализа сетевого трафика у нас есть утилита Wireshark .
Есть ли у нас похожая утилита для перехвата всех межпроцессных взаимодействий между любыми двумя процессами в Unix / Linux?
Я создал несколько процессов в памяти, и мне нужно профилировать, как они общаются друг с другом.
command-line
shell
process
ipc
Lazer
источник
источник
Ответы:
Это во многом зависит от механизма общения.
На самом прозрачном конце спектра процессы могут взаимодействовать с использованием интернет-сокетов (то есть IP ). Затем wireshark или tcpdump могут показывать весь трафик, указывая его на интерфейс обратной связи.
На промежуточном уровне можно наблюдать трафик на трубопроводах и гнездах Unix с помощью
truss
/strace
/trace
/ ..., швейцарской армейской бензопилой системы отслеживания. Однако это может значительно замедлить процессы, поэтому может не подойти для профилирования.На самом непрозрачном конце спектра находится общая память. Основной принцип работы разделяемой памяти заключается в том, что доступы абсолютно прозрачны в каждом вовлеченном процессе, вам нужны только системные вызовы для настройки областей разделяемой памяти. Отслеживать эти обращения к памяти извне было бы сложно, особенно если вам нужно наблюдение, чтобы не нарушить время. Вы можете попробовать такие инструменты, как инструментарий трассировки Linux (требуется патч для ядра) и посмотреть, сможете ли вы извлечь полезную информацию; это та область, где я ожидаю, что у Solaris будет лучший инструмент (но я об этом ничего не знаю).
Если у вас есть источник, лучшим вариантом может быть добавление операторов трассировки в ключевые библиотечные функции. Это может быть достигнуто с помощью
LD_PRELOAD
хитростей, даже если у вас нет (целого) источника, если у вас достаточно понимания потока управления той части программы, которая обращается к общей памяти.источник
Это покажет, что процесс читает и пишет:
Это не чистый вывод (показывает такие строки, как: write (#,)), но работает! (и однострочный: D) Вам также может не понравиться тот факт, что аргументы сокращены. Для управления этим используйте параметр -s, который устанавливает максимальную длину отображаемых строк.
Он перехватывает все потоки, так что вы можете захотеть отфильтровать это.
Вы можете отфильтровать это:
показывает только дескриптор 1 вызовов. 2> & 1 - перенаправить stderr в stdout, так как strace записывает в stderr по умолчанию.
источник