Isso depende muito do mecanismo de comunicação.
-
Na extremidade mais transparente do espectro, os processos podem se comunicar usando sockets de internet (ou seja, IP ). Em seguida, o wireshark ou o tcpdump podem mostrar todo o tráfego, apontando-o na interface de loopback.
-
Em um nível intermediário, o tráfego em pipes e soquetes unix pode ser observado com
truss
/strace
/trace
/ ... , a motosserra do exército suíço de rastreamento do sistema. Isso pode desacelerar os processos significativamente, no entanto, pode não ser adequado para criação de perfil. -
No extremo mais opaco do espectro, há memória compartilhada. O princípio operacional básico da memória compartilhada é que os acessos são completamente transparentes em cada processo envolvido, você só precisa de chamadas do sistema para configurar regiões de memória compartilhada. Rastrear esses acessos de memória do lado de fora seria difícil, especialmente se você precisar que a observação não perturbe o tempo. Você pode tentar ferramentas como o Kit de ferramentas de rastreio do Linux (requer um patch de kernel) e ver se é possível extrair informações úteis; é o tipo de área onde eu esperaria que o Solaris tivesse uma ferramenta melhor (mas eu não tenho conhecimento disso).
Se você tiver a fonte, sua melhor opção pode ser adicionar instruções de rastreamento às principais funções da biblioteca. Isso pode ser possível com
LD_PRELOAD
truques, mesmo se você não tiver a fonte (inteira), contanto que você tenha compreensão suficiente do fluxo de controle da parte do programa que acessa a memória compartilhada.