(Eu postei minha resposta pela primeira vez neste pergunta askubuntu , mas removeu de lá e postou aqui, como é mais relevante.)
Existem várias maneiras de investigar quais processos de arquivos e bibliotecas foram abertos; As principais ferramentas são lsof
, strace
e ltrace
. Às vezes, é necessário executá-los com sudo
, para que o programa tenha acesso a tudo o que precisa para obter um instantâneo preciso do que um programa está chamando.
1) Com lsof
você precisa encontrar o id do processo que deseja consultar, por exemplo, use:
lsof -c firefox
, que listará todos os arquivos firefox
abertos e todas as suas chamadas para as bibliotecas compartilhadas do sistema. (O Firefox atualmente tem um pid de 3310 no meu sistema, então você também pode usar lsof -p 3310
, mas você teria que procurar o ID do processo primeiro com ps aux | grep [f]irefox
). Mais informações sobre lsof
estão detalhadas neste artigo da IBM útil.
2) ltrace
e strace
têm funções e opções muito semelhantes e são muito úteis para descobrir informações detalhadas sobre quais chamadas um processo está realizando. A principal diferença é que ltrace
geralmente rastreia apenas library
chamadas (embora possa rastrear chamadas do sistema com a opção -S
), enquanto strace
rastreia as chamadas library
e outras system
. Mais informações sobre processos de rastreamento estão disponíveis em artigo da IBM . Lsof
é provavelmente mais útil se você quiser examinar um processo já em execução, mas strace
também pode fazer isso e monitorar as chamadas em tempo real quando receber um pid de processo (o sudo é sempre usado quando se anexa a um processo) :
sudo strace -p 3310
mas é muito mais útil iniciar o programa com strace
e ver o que foi chamado, como no exemplo a seguir:
strace -f -e trace=open /usr/bin/firefox
Você pode executar apenas strace
com o processo de destino e sem opções, mas as opções aqui significam que processos filho são rastreados ( -f
) e que todas as chamadas de sistema abertas são rastreadas ( -e trace=open
)
Se você quiser salvar a saída no arquivo, você pode especificar -o ~/firefox.trace
antes de especificar /usr/bin/firefox
.
Se você quiser uma lista resumida de chamadas da biblioteca, por exemplo, você pode usar
ltrace -c /usr/bin/leafpad
e depois sair do programa e a lista será produzida. Omita a opção -c
para visualizar as chamadas em tempo real.
Os resultados de strace
e ltrace
podem não ser muito úteis para você, pois são difíceis de decifrar a menos que você saiba o que está procurando, mas lsof
deve fornecer algumas informações úteis básicas.