Come utilizzare Strace per monitorare le chiamate di sistema Linux

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

I programmi Linux chiedono il kernel fare alcune cose per loro. Il strace Comando rivela queste chiamate di sistema. Puoi usarli per capire come funzionano i programmi e perché, a volte, non lo fanno.

Il kernel e le chiamate di sistema

Smart come potrebbero essere, i programmi per computer non possono fare tutto per se stessi. Devono effettuare richieste di avere determinate funzioni eseguite per loro. Queste richieste vanno al kernel Linux. In genere, c'è una biblioteca o un'altra interfaccia software che il programma chiama e la biblioteca fa quindi la richiesta appropriata, chiamata chiamata di sistema, al kernel.

Essere in grado di vedere il sistema chiama che un programma ha effettuato e quali sono state le risposte possono aiutarti a comprendere il funzionamento interno dei programmi che ti interessano o che hai scritto. Questo è che cosa strace fa . Può aiutare a risolvere i problemi e cercare colli di bottiglia.

Questo non è lo stesso di Debug di una domanda con uno strumento come Gdb. . Un programma di debug consente di indagare sull'operazione interna di un programma come funziona. Ti consente di passare attraverso la logica del programma e ispezionare la memoria e i valori variabili. In confronto, cosa strace Fa catturare le informazioni di chiamata del sistema in quanto il programma è in esecuzione. Quando il programma tracciato termina, strace Elenca le informazioni di chiamata del sistema alla finestra del terminale.

Le chiamate di sistema forniscono tutti i tipi di funzionalità di basso livello, come le azioni di lettura e scrittura su file, processi di uccisione e così via. C'è un elenco di centinaia di chiamate di sistema sul Pagina uomo Syscalls. .

IMPARENTATO: Debug con GDB: Inizia

Installazione di Strace.

Se strace Non è già installato sul tuo computer, è possibile installarlo molto facilmente.

Su Ubuntu, usa questo comando:

 Sudo Apt Install Strace 

Su Fedora, digita questo comando:

 Sudo DNF Installa Strace 

Su Manjaro, il comando è:

 Sudo Pacman -sy Strace 

Primi passi con strace

Useremo un piccolo programma per dimostrare strace . Non fa molto: apre un file e scrive una linea di testo ad esso, e non ha alcun errore di controllo. È solo un rapido hack in modo da avere qualcosa con cui usare strace .

 #include & lt; stdio.h & gt;

int principale (int Argc, char argv []) {

  // Maniglia dei file
  File * FileGeek;

  // Apri un file chiamato "strace_demo.txt" o crearlo
  FileGeek = fopen ("strace_demo.txt", "w");

  // scrivi un po 'di testo nel file
  FPRINTF (FileGeek, "Scrivi questo al file");

  // Chiudi il file
  fClose (FileGeek);

  // uscita dal programma
  ritorno (0);

} // Fine del principale 

Abbiamo salvato questo in un file chiamato "file-io.c" e lo ha compilato con GCC. in un eseguibile chiamato stex. , chiamato per " ns corsa ex ampio."

 GCC -O STEX FILE-IO.C 

Chiameremo strace Dalla riga di comando e passare il nome del nostro nuovo eseguibile ad esso come il processo che vogliamo essere tracciato. Potremmo semplicemente rintracciare tutti i comandi Linux o qualsiasi altro eseguibile binario. Stiamo usando il nostro minuscolo programma per due motivi.

Il primo motivo è quello strace è verboso. Ci può essere un sacco di output. È fantastico quando stai usando strace in rabbia, ma può essere travolgente all'inizio. C'è limitato strace Uscita per il nostro piccolo programma. La seconda ragione è che il nostro programma ha funzionalità limitate, e il codice sorgente è breve e semplice. Ciò rende più facile identificare quali sezioni dell'output si riferiscono alle diverse parti dei lavori interni del programma.

 Strace ./stex

Possiamo vedere chiaramente il Scrivi Chiamata di sistema Inviamento del testo "Scrivi questo al file" al nostro file aperto e al exit_group. chiamata di sistema. Questo termina tutti i thread nell'applicazione e invia un valore di ritorno alla shell.

Filtrando l'uscita

Anche con il nostro semplice programma dimostrativo, c'è un sacco di output. Possiamo usare il -e. opzione (espressione). Passeremo nel nome della chiamata di sistema che vogliamo vedere.

 Strace -e scrivere ./stex

È possibile riportare su più chiamate di sistema aggiungendole come elenco separato da virgole. Non includere alcuna spazi bianca nell'elenco delle chiamate di sistema.

 Strace -e chiudi, scrivi ./stex

Invio dell'output a un file

Il vantaggio del filtraggio dell'output è anche il problema con il filtraggio dell'output. Vedi cosa hai chiesto di vedere, ma non vedi nient'altro. E alcuni di quelle altre output potrebbero essere più utili a te delle cose che hai chiesto di vedere.

A volte, è più conveniente catturare tutto e cercare e scorrere l'intero insieme dei risultati. In questo modo, non escluderai accidentalmente nulla di importante. Il -o (output) L'opzione consente di inviare l'uscita da a strace sessione a un file di testo.

 Strace -o Trace-output.txt ./stex

Puoi allora utilizzare il meno comando Per scorrere la quotazione e cercare chiamate di sistema, o qualsiasi altra cosa, per nome.

 Meno traccia-output.txt 

Ora puoi usare tutto meno 'S Capacità di ricerca per indagare sull'output.

IMPARENTATO: Come utilizzare il comando Meno su Linux

Aggiungere timestamps.

È possibile aggiungere diversi timestamps all'uscita. Il -R (Timestamps relativi) L'opzione aggiunge timestamps che mostrano la differenza di tempo tra l'avvio di ogni chiamata di sistema successiva. Si noti che questi valori del tempo includeranno il tempo trascorso nella precedente chiamata di sistema e qualsiasi altra cosa che il programma stava facendo prima della prossima chiamata di sistema.

 Strace -r ./stex

I timestamp sono visualizzati all'inizio di ciascuna riga di uscita.

Per vedere la quantità di tempo trascorso in ogni chiamata di sistema, usa il -T Opzione (Syscall-Times). Questo mostra la durata del tempo trascorso all'interno di ogni chiamata di sistema.

 Strace -t ./stex

Le durate del tempo sono mostrate alla fine di ciascuna linea di chiamata di sistema.

Per vedere il tempo in cui è stata chiamata ogni chiamata di sistema, usa il -T. (timestamps assoluti) opzione. Questo mostra il tempo "orologio da parete", con una risoluzione di microsecond.

 Strace -TT ./stex

I tempi vengono visualizzati all'inizio di ogni riga.

Tracciare un processo di esecuzione

Se il processo che si desidera tracciare è già in esecuzione, è ancora possibile allegare strace ad esso. Per fare ciò, è necessario conoscere l'ID del processo. Puoi utilizzo Ps. insieme a grep. Per trovarlo. Abbiamo Firefox in esecuzione. Per scoprire l'ID del firefox. processo, possiamo usare Ps. e tubata attraverso grep. .

 PS -E | GREP Firefox 

Possiamo vedere che l'ID del processo è 8483. Useremo il -P (ID processo) Opzione da raccontare strace quale processo si attacca a. Si noti che dovrai usare sudo. :

 Sudo Strace -P 8483 

Vedrai una notifica che strace Si è collegato al processo, e quindi le chiamate di traccia del sistema verranno visualizzate nella finestra del terminale come al solito.

Creando un report.

Il -C (Solo sommario) Cause opzionali strace per stampare un rapporto. Genera una tabella per informazioni sulle chiamate di sistema effettuate dal programma TRACCED.

 Strace -C ./stex

Le colonne sono:

  • % tempo : La percentuale del tempo di esecuzione trascorso in ciascuna chiamata di sistema.
  • secondi : Il tempo totale espresso in secondi e microsecondi trascorsi in ciascuna chiamata di sistema.
  • USECS / CALL. : Il tempo medio in microsecondi ha speso in ogni chiamata di sistema.
  • chiamate : Il numero di volte in cui ogni chiamata di sistema è stata eseguita.
  • errori : Il numero di guasti per ogni chiamata di sistema.
  • syscall. : Il nome della chiamata di sistema.

Questi valori mostreranno Zeros per programmi banale che eseguono e terminano rapidamente. I valori del mondo reale sono mostrati per programmi che fanno qualcosa di più significativo della nostra applicazione dimostrativa.

Profonde approfondimenti, facilmente

Il strace L'output può mostrare quali vengono apportate le chiamate di sistema, quali vengono apportati ripetutamente e quanto tempo di esecuzione viene speso all'interno del codice del kernel. Sono grandi informazioni. Spesso, quando stai cercando di capire cosa sta succedendo all'interno del tuo codice, è facile dimenticare che il tuo binario sta interagendo quasi senza sosta con il kernel per eseguire molte delle sue funzioni.

Usando strace , vedi l'immagine completa.


Linux - Articoli più popolari

Come uccidere i processi di zombie su Linux

Linux Nov 25, 2024

Fatmawati Achmad Zaenuri / Shutterstock I programmi che sono scarsamente scritti o si esibiscono male possono andarsene Processi di zombie in agguat..


Come utilizzare DB Browser per SQLite su Linux

Linux Dec 16, 2024

Fatmawati Achmad Zaenuri / Shutterstock Browser DB per SQLite Consente di visualizzare e modificare i database SQLITE su Linux. È possibile progettar..


Come nascondere tutte le icone del desktop su Mac

Linux Jun 23, 2025

Krisda / Shutterstock. Il tuo Mac Desktop è un casino? Non voglio davvero organizzare tutto? Non preoccuparti, puoi utilizzare un comando terminale per nascon..


Quali sono i dizionari di Bash su Linux e come li usi?

Linux Jun 16, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com I dizionari di Bash ti offrono mappe hash e array associativi negli script Shell Linux. Ti mostreremo come utiliz..


Cosa c'è di nuovo in Debian 11 "Bullseye"

Linux Jul 22, 2025

Debian. , il progenitore di molte altre distribuzioni Linux, ha reso la versione 11 disponibile nella fase di test. Stai pesando le virtù del potenziamento, o sei solo curioso ..


Il Best Linux Laptops del 2021 per gli sviluppatori e gli appassionati di

Linux Sep 27, 2025

Tomeqs / shutterstock.com. Cosa cercare in un laptop Linux nel 2021 Puoi comprare quasi tutti i laptop e Installa Linux su di esso . Tut..


5 Caratteristiche Ubuntu Linux che dovresti usare

Linux Dec 6, 2024

Ubuntu Linux è ricco di funzionalità e viene fornito con una selezione curata di software preinstallato. Scava solo un po 'più in profondità e troverai alcune funzionalità che dovresti usa..


Come elencare le variabili di ambiente su Linux

Linux Oct 31, 2025

Su Linux, le variabili di ambiente contengono valori e impostazioni importanti. Script, applicazioni e shell leggono questi valori, spesso per configurare se stessi o per controllare il loro co..


Categorie