Como usar strace para monitorar chamadas do sistema Linux

Jun 23, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock.com

Programas Linux pedem ao núcleo para fazer algumas coisas para eles. o strace. O comando revela essas chamadas do sistema. Você pode usá-los para entender como os programas funcionam e por que, às vezes, eles não.

O kernel e o sistema chama

Tão inteligente quanto eles podem ser, os programas de computador não podem fazer tudo para si mesmos. Eles precisam fazer solicitações para ter certas funções executadas para eles. Esses pedidos vão para o kernel do Linux. Normalmente, há uma biblioteca ou outra interface de software que o programa chama, e a biblioteca torna a solicitação apropriada chamada de uma chamada de sistema para o kernel.

Ser capaz de ver as chamadas do sistema que um programa fez e quais as respostas podem ajudá-lo a entender o funcionamento interno dos programas que lhe interessam ou que você escreveu. Isto é o que strace. faz . Pode ajudar a solucionar problemas e procurar os gargalos.

Isso não é o mesmo que Depurando uma aplicação com uma ferramenta como gdb. . Um programa de depuração permite investigar a operação interna de um programa como é executado. Ele permite que você passe pela lógica do seu programa e inspecione os valores de memória e variáveis. Em comparação, o que strace. O é capturar as informações de chamada do sistema à medida que o programa está sendo executado. Quando o programa rastreado termina, strace. Lista as informações de chamada do sistema para a janela do terminal.

As chamadas do sistema fornecem todos os tipos de funcionalidade de baixo nível, como ações de leitura e gravação em arquivos, matando processos e assim por diante. Há uma lista de centenas de chamadas do sistema no Syscalls Man Page. .

RELACIONADO: Depuração com o GDB: Introdução

Instalando Strace.

Se strace. já não está instalado no seu computador, você pode instalá-lo com muita facilidade.

No Ubuntu, use este comando:

 sudo apt instalar strace 

No Fedora, digite este comando:

 Sudo DNF instalar strace 

Em Manjaro, o comando é:

 Sudo Pacman -y Strace 

Primeiros passos com strace

Nós vamos usar um pequeno programa para demonstrar strace. . Não faz muito: abre um arquivo e escreve uma linha de texto para ele, e não tem qualquer verificação de erro nela. É apenas um hack rápido para que tenhamos algo para usar com strace. .

 #include & lt; stdio.h & gt;

int Main (int argc, char argv []) {

  // alça de arquivo
  Arquivo * FileGeek;

  // abre um arquivo chamado "strace_demo.txt" ou crie
  FileGeek = FOPEN ("strace_demo.txt", "W");

  // escreva algum texto para o arquivo
  fprintf (FileGeek, "Escreva isso no arquivo");

  // fechar o arquivo
  fclose (FileGeek);

  // Sair do programa
  retorno (0);

} // final do principal 

Nós salvamos isso em um arquivo chamado "file-io.c" e compilado com gcc. em um executável chamado stex. , nomeado para " St. raça ex amplo."

 gcc -o stex file-io.c 

Nós vamos ligar strace. Na linha de comando e passe o nome do nosso novo executável a ele como o processo que queremos ter rastreado. Poderíamos facilmente traçar qualquer um dos comandos do Linux ou qualquer outro executável binário. Estamos usando nosso minúsculo programa por duas razões.

A primeira razão é que strace. é verboso. Pode haver muita saída. Isso é ótimo quando você está usando strace. com raiva, mas pode ser esmagadora no começo. Há limitado strace. saída para o nosso minúsculo programa. A segunda razão é que nosso programa tem funcionalidade limitada, e o código-fonte é curto e direto. Isso facilita identificar quais seções da saída se referem às diferentes partes do funcionamento interno do programa.

 Strace ./stex

Podemos ver claramente o escrever Chamada do sistema Enviando o texto "Escreva isso no arquivo" para o nosso arquivo aberto e exit_group chamada do sistema. Isso termina todos os encadeamentos no aplicativo e envia um valor de retorno de volta para o shell.

Filtrando a saída

Mesmo com nosso simples programa de demonstração, há muita saída. Nós podemos usar o -e. opção (expressão). Vamos passar no nome da chamada do sistema que queremos ver.

 strace -e escrever ./stex

Você pode relatar várias chamadas do sistema, adicionando-as como uma lista separada por vírgulas. Não inclua nenhum espaço em branco na lista de chamadas do sistema.

 strace -e fechar, escreva ./stex

Enviando a saída para um arquivo

O benefício de filtrar a saída é também o problema com a filtragem da saída. Você vê o que você pediu para ver, mas não vê mais nada. E alguns dessa outra saída podem ser mais úteis para você do que as coisas que você pediu para ver.

Às vezes, é mais conveniente capturar tudo e pesquisar e percorrer todo o conjunto de resultados. Dessa forma, você não excluirá acidentalmente nada importante. o -o. (Saída) Opção permite enviar a saída de um strace. sessão para um arquivo de texto.

 strace -o trace-output.txt ./stex

Você pode então use o menos comando Para percorrer a listagem e procurar por chamadas do sistema - ou qualquer outra coisa.

 Menos Trace-Output.txt 

Agora você pode usar todos menos 'S Capacidades de pesquisa para investigar a saída.

RELACIONADO: Como usar o comando menos no Linux

Adicionando timestamps.

Você pode adicionar vários timestamps diferentes à saída. o -r. (Timestamps relativos) Opção adiciona timestamps que mostram a diferença horária entre o início de cada chamada de sistema sucessiva. Observe que esses valores de tempo incluirão o tempo gasto na chamada anterior do sistema e qualquer outra coisa que o programa estava fazendo antes da próxima chamada do sistema.

 strace -r ./stex

Os timestamps são exibidos no início de cada linha de saída.

Para ver a quantidade de tempo gasto em cada chamada do sistema, use o -T. (syscall-times). Isso mostra a duração do tempo gasto dentro de cada chamada do sistema.

 strace -t ./stex

As durações de tempo são mostradas no final de cada linha de chamada do sistema.

Para ver a hora em que cada chamada de sistema foi chamada, use o -tt. Opção (timestamps absolutas). Isso mostra o tempo de "relógio de parede", com uma resolução microssegundo.

 strace -tt ./stex

Os tempos são exibidos no início de cada linha.

Rastreando um processo de execução

Se o processo que você deseja rastrear já está sendo executado, você ainda pode anexar strace. para isso. Para fazer isso, você precisa saber o ID do processo. Você pode usar PS com grep. para encontrar isso. Nós temos o Firefox em funcionamento. Para descobrir o id do Raposa de fogo processo, podemos usar PS e tube it através de. grep. .

 PS -E | grep firefox 

Podemos ver que o ID do processo é 8483. Nós usaremos o -p. Opção (ID do processo) para contar strace. qual processo para anexar. Note que você precisará usar sudo :

 Sudo Strace -P 8483 

Você verá uma notificação de que strace. anexou-se ao processo e, em seguida, as chamadas de rastreamento do sistema serão exibidas na janela do terminal como de costume.

Criando um relatório

o -c. (somente resumo) opção provoca strace. para imprimir um relatório. Ele gera uma tabela para obter informações sobre as chamadas do sistema que foram feitas pelo programa traçado.

 strace -c ./stex

As colunas são:

  • % Tempo : A porcentagem do tempo de execução que foi gasto em cada chamada do sistema.
  • segundos : O tempo total expresso em segundos e microssegundos gastos em cada chamada do sistema.
  • USECS / Call. : O tempo médio em microssegundos gastos em cada chamada de sistema.
  • Chamadas : O número de vezes que cada chamada do sistema foi executada.
  • erros : O número de falhas para cada chamada do sistema.
  • syscall. : O nome da chamada do sistema.

Esses valores mostrarão zeros para programas triviais que executam e terminam rapidamente. Os valores do mundo real são mostrados para programas que fazem algo mais significativo do que nosso aplicativo de demonstração.

Insights profundos, facilmente

o strace. A saída pode mostrar quais chamadas do sistema estão sendo feitas, quais estão sendo feitas repetidamente, e quanto tempo de execução está sendo gasto dentro do código do lado do kernel. Isso é ótima informação. Muitas vezes, quando você está tentando entender o que está acontecendo dentro do seu código, é fácil esquecer que seu binário está interagindo quase sem parar com o kernel para realizar muitas de suas funções.

Usando strace. , você vê a foto completa.


Linux - Artigos mais populares

Como gerenciar servidores Linux com a interface da Web da Cockpit

Linux Dec 9, 2024

Fatmawati Achmad Zaenuri / Shutterstock Você pode facilmente monitorar e gerenciar vários computadores Linux com Cockpit, uma ferramenta de administração e..


Como bloquear o seu Mac usando o terminal

Linux Feb 16, 2025

Uma das primeiras regras da cibersegurança é sempre trancar o seu computador antes de se afastar dela. Embora possa não ser a maneira mais rápida, você pode bloquear o Apple Mac usa..


O 6 Melhor Lightweight Linux Distros

Linux Jul 27, 2025

3DMI / Shutterstock.com. Se o seu computador Windows ou Mac for velho e lutando para acompanhar, instalar o Linux pode dar-lhe uma nova locação de vida. As d..


Como configurar ou desativar notificações de atualização do Linux Mint

Linux Jul 9, 2025

Tinha o suficiente das notificações de atualização irritantes do Linux Mint? Ou talvez você esteja tão preocupado em ficar atualizado que você quer vê-los ainda mais? De qualquer f..


O que há de novo no Kernel Linux 5.14

Linux Sep 9, 2025

Fotografia de Locke / Shutterstock Como Linux vira 30 anos, o kernel 5.14 foi lançado. Ele contém a oferta ampla usual de correções internas abaixo do cap�..


KDE Connect está finalmente chegando ao iphone

Linux Oct 26, 2025

KDE. Se você está procurando uma maneira fácil de fazer o seu iPhone jogar nice com o seu KDE Desktop hoje é o seu dia de sorte, como KDE Connect est..


10 comandos básicos do Linux para iniciantes

Linux Oct 13, 2025

Basta começar no Linux? Fazendo-se confortável com a linha de comando é essencial. Se você já estiver familiarizado com utilitários de linha de comando, descobrirá que o Linux e o M..


Como listar variáveis de ambiente no Linux

Linux Oct 31, 2025

No Linux, as variáveis de ambiente contêm valores e configurações importantes. Scripts, aplicações e conchas leem esses valores, geralmente para configurar a si mesmos ou controlar seu co..


Categorias