Existe um comando como o pstree para bibliotecas?

3

Eu preciso determinar se uma biblioteca chamada libunaSA.so está sendo chamada diretamente pelo processo ou por outra biblioteca chamada libtoki2.so . Eu acho que o que estou procurando é um pstree para bibliotecas. O sistema está executando o RHEL 5.3 Beta.

Esta saída mostra as duas bibliotecas no mapa de processo

# grep -e toki -e una /proc/2335/maps
0043f000-004ad000 r-xp 00000000 08:02 543465     /usr/lib/libtoki2.so
004ad000-004c5000 rwxp 0006d000 08:02 543465     /usr/lib/libtoki2.so
01185000-01397000 r-xp 00000000 08:02 543503     /usr/lib/libunaSA.so
01397000-013dc000 rwxp 00211000 08:02 543503     /usr/lib/libunaSA.so

Esta saída mostra que apenas a biblioteca libtoki2.so está no cache atual

# ldconfig -p | grep -e una -e toki
libtoki2.so (libc6) => /usr/lib/libtoki2.so
libtoki.so.4.4.1 (libc6) => /usr/lib/libtoki.so.4.4.1
libtoki.so.2 (libc6) => /usr/lib/libtoki.so.2

Eu anexei strace ao processo em execução, mas ele não fornece muita saída

# strace -p 2335
Process 2335 attached - interrupt to quit
futex(0xb7ef5bd8, FUTEX_WAIT, 2336, NULL

Aqui está a saída para o ldd para cada biblioteca

# ldd /usr/lib/libtoki2.so
        linux-gate.so.1 =>  (0x00a0a000)
        libdl.so.2 => /lib/libdl.so.2 (0x001bd000)
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x00f3f000)
        libm.so.6 => /lib/libm.so.6 (0x00b27000)
        libc.so.6 => /lib/libc.so.6 (0x0043d000)
        /lib/ld-linux.so.2 (0x00742000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00110000)
# ldd /usr/lib/libunaSA.so
        linux-gate.so.1 =>  (0x00244000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00baf000)
        libdl.so.2 => /lib/libdl.so.2 (0x007fa000)
        libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0x009ce000)
        libm.so.6 => /lib/libm.so.6 (0x00c96000)
        libc.so.6 => /lib/libc.so.6 (0x004a2000)
        /lib/ld-linux.so.2 (0x00742000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00a9f000)
    
por flashnode 12.01.2011 / 16:58

1 resposta

0

Tudo o que você postou sugere que a libunaSA.so está sozinha. libtoki2.so não requer libunaSA (como mostrado por ldd). Você poderia tentar usar o ltrace ou o lsof no aplicativo em execução para ver se o libunaSA é chamado; se libtoki2 fizer a chamada, então ela estará oculta (acredito) na saída do ltrace.

lsof mostrará se o binário requer libunaSA de todo.

Tanto o ltrace quanto o lsof estão disponíveis para o RHEL 5.

    
por 13.01.2011 / 23:18

Tags