(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.