Pessoal,

Eu comentei ontem sobre o Strace aqui na lista, e recebi um email comentando sobre, acabei escrevendo um pouco sobre o comando Strace e Ltrace, decidi compartilha com o grupo, talvez ajude-os em algo!



Existe dois comandos chamados trace de processos que você pode utilizar e são bastante úteis, pois as mensagens geradas por um programa sempre são mensagens criadas pelo programador, mas não diz tudo o que acontece por dentro do processo.

O Strace ele faz um trace e mostra todas as chamadas de sistema, tudo que é chamada para o Kernel, para explicar isso fica mais complicado, mas normalmente o programa chama uma função e ela é convertida para um função da API do Kernel.

Aqui tá um exemplo que pode te ajudar.

Esse é o comando 'strace ls' no meu home.

/* 61 entries */, 32768)    = 1984
getdents(3, /* 0 entries */, 32768)     = 0
close(3)                                = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcdbddcf000
write(1, "Desktop\nDocuments\nDownloads\nISOS"..., 79) = 79

Todas as palavras no começo, como por exemplo mmap, você pode no seu terminal e rodar man mmap, e você verá o que essa função faz e quais são os argumentos que ela recebe, isso é legal para conhece passo a passo que o processo pode estar fazendo e o programador não te disse.

Explore bem o man do strace que ele pode te ajudar em alguns momentos durante sua vida com Linux.


Outro também bem parecido não sei se você conhece é o Ltrace, ele faz a mesma função que o Strace, porém o S do Strace, é System, e o L do Ltrace é LIbrary. Concluimos então que o Ltrace ele faz a mesma coisa só que para as funções das bibliotecas!


teste depois com alguns comandos colocar o strace -c comando , ou , ltrace -c comando.

Você verá quantas vezes uma chamada de sistema ou de biblioteca foi realizada e quantos erros podem ter retornados quando essa função foi chamada. Não é para se preocupar se o programa esta rodando normal, exemplo, vários programas realizam tentativas de abrir aquivos em caminhos especificos, quando não existem eles procuram em outros lugares, mas a função que tentou abrir o arquivo que não existe gerou um erro, mas não se preocupe com o tempo você pegará o jeito dele.

Outra dica boa, é as opções -f -F , são para os Forks gerados pelo processo que vc está monitorando, colocando essas opções vocês vão ver tudo do processo principal e incluindo tudo dos processos que foram fork desse principal!

Espero te ajudado!
Abs!

-Aslan