Hvordan bruke strace å overvåke Linux systemkall

Jun 23, 2025
Linux
fatmawati achmad zaenuri / shutterstock.com

Linux-programmer spør [1. 3] kjernen å gjøre noen ting for dem. De strace. kommandoen avslører disse systemanropene. Du kan bruke dem til å forstå hvordan programmer fungerer og hvorfor, noen ganger, de gjør det ikke.

Kjernen og systemet ringer

Så smart som de kanskje er, kan dataprogrammer ikke gjøre alt for seg selv. De trenger å gjøre forespørsler om å få visse funksjoner som utføres for dem. Disse forespørslene går til Linux-kjernen. Vanligvis er det et bibliotek eller et annet programvaregrensesnitt som programmet ringer, og biblioteket gjør deretter det riktige forespørsels-kalt et systemanrop til kjernen.

Å kunne se systemet samtaler at et program har gjort, og hva svarene var kan hjelpe deg å forstå de indre arbeidene til programmer som interesserer deg eller som du har skrevet. Dette er hva strace. gjør . Det kan bidra til å feilsøke problemer og se etter flaskehalser.

Dette er ikke det samme som feilsøking av en søknad med et verktøy som GDB. . Et feilsøkingsprogram lar deg undersøke den interne driften av et program som det kjører. Det lar deg gå gjennom logikken til programmet ditt og inspisere minne og variable verdier. Til sammenligning, hva strace. Fanges det systemanropsinformasjonen som programmet kjører. Når det sporede programmet avsluttes, strace. Viser systemanropsinformasjonen til terminalvinduet.

Systemanrop gir all slags lavt nivå funksjonalitet, for eksempel lese og skrive handlinger på filer, drepe prosesser og så videre. Det er en liste over hundrevis av systemanrop på Syscalls manns side .

I SLEKT: Feilsøking med GDB: Komme i gang

Installere Strace.

Hvis strace. Er ikke allerede installert på datamaskinen din, du kan installere den veldig enkelt.

På Ubuntu, bruk denne kommandoen:

 sudo apt installere strace 

På Fedora, skriv inn denne kommandoen:

 Sudo DNF Installer Strace 

På Manjaro er kommandoen:

 Sudo Pacman -Sy Strace 

Første trinn med strace

Vi bruker et lite program for å demonstrere strace. . Det gjør ikke mye: Den åpner en fil og skriver en tekstlinje til den, og den har ingen feilkontroll i den. Det er bare en rask hack, slik at vi har noe å bruke med strace. .

 #include & lt; stdio.h & gt;

INT Main (Int Argc, Char Argv []) {

  // filhåndtak
  Fil * FileGeek;

  // Åpne en fil kalt "Strace_Demo.txt", eller opprett det
  FileGeek = FOPEN ("STRACE_DEMO.TXT", "W");

  // Skriv litt tekst til filen
  fprintf (FileGeek, "Skriv dette til filen");

  // Lukk filen
  fclose (fileek);

  // utgang fra programmet
  returnere (0);

} // End of Main 

Vi lagret dette inn i en fil kalt "fil-io.c" og samlet den med GCC. inn i en kjørbar kalt Stex. , oppkalt for " St. løp Ex. rikelig. "

 GCC -O STEX FILE-IO.C 

Vi ringer til strace. Fra kommandolinjen og send navnet på vår nye kjørbare til den som prosessen vi vil ha sporet. Vi kunne like enkelt spore noen av Linux-kommandoene eller andre binære kjørbare. Vi bruker vårt lille program av to grunner.

Den første grunnen er at strace. er verbose. Det kan være mye utgang. Det er flott når du bruker strace. i sinne, men det kan være overveldende i begynnelsen. Det er begrenset strace. Utgang for vårt lille program. Den andre grunnen er at vårt program har begrenset funksjonalitet, og kildekoden er kort og grei. Dette gjør det lettere å identifisere hvilke deler av utgangen som refererer til de ulike delene av programmets interne arbeid.

 Strace ./stex

Vi kan tydelig se skrive Systemanrop Sende teksten "Skriv dette til filen" til vår åpne fil og exit_group. Systemanrop. Dette avslutter alle tråder i programmet og sender en returverdi tilbake til skallet.

Filtrerer utgangen

Selv med vårt enkle demonstrasjonsprogram, er det ganske mye produksjon. Vi kan bruke -E (Expression) -alternativet. Vi sender inn navnet på systemanropet som vi vil se.

 Strace -e skrive ./stex

Du kan rapportere om flere systemanrop ved å legge til dem som en kommaseparert liste. Ikke ta med noe hvitt i listen over systemanrop.

 Strace -e Lukk, skriv ./stex

Sende utgangen til en fil

Fordelen med å filtrere utgangen er også problemet med å filtrere utgangen. Du ser hva du har bedt om å se, men du ser ikke noe annet. Og noe av den andre utgangen kan være mer nyttig for deg enn de tingene du har bedt om å se.

Noen ganger er det mer praktisk å fange alt og søke og bla gjennom hele settet med resultater. På den måten vil du ikke ved et uhell utelukke noe viktig. De -o (Output) -alternativet lar deg sende utgangen fra a strace. økt til en tekstfil.

 Strace -o Trace-Output.txt ./stex

Du kan da bruke mindre kommando For å bla gjennom oppføringen og søk etter systemanrop - eller noe annet - ved navn.

 Mindre Trace-Output.txt 

Du kan nå bruke alle mindre S søkemuligheter for å undersøke produksjonen.

I SLEKT: Slik bruker du den mindre kommandoen på Linux

Legge til tidsstempler

Du kan legge til flere forskjellige tidsstempler til utgangen. De -R (Relative Timestamps) -alternativet legger til tidsstempler som viser tidsforskjellen mellom starten på hvert påfølgende systemanrop. Merk at disse tidsverdiene vil inneholde tiden som brukes i forrige systemanrop og noe annet som programmet gjorde før neste systemanrop.

 Strace -r ./stex

Timestampene vises ved starten av hver linje med utgang.

For å se hvor mye tid brukt i hvert systemanrop, bruk -T. (Syscall-Times) alternativet. Dette viser varigheten av tiden som brukes i hvert systemanrop.

 Strace -t ./stex

Tidsperioden er vist på slutten av hver systemanropslinje.

For å se tiden der hvert systemanrop ble kalt, bruk -t. (Absolutt Timestamps) alternativet. Dette viser tiden "Wall Clock", med en mikrosekundoppløsning.

 Strace -tt ./stex

Tider vises ved starten av hver linje.

Tracing en løpende prosess

Hvis prosessen du vil spore, kjøres, kan du fortsatt legge ved strace. til det. For å gjøre det, må du vite prosess-IDen. Du kan bruk PS. med Grep å finne dette. Vi har Firefox i gang. For å finne ut IDen til Firefox. prosess, vi kan bruke PS. og rør det gjennom det Grep .

 ps -e | grep firefox 

Vi kan se at prosess-IDen er 8483. Vi bruker -P. (Process ID) -alternativet for å fortelle strace. hvilken prosess for å feste til. Merk at du må bruke sudo. :

 Sudo Strace -P 8483 

Du vil se et varsel om at strace. Har festet seg til prosessen, og deretter vises systemsporanropene i terminalvinduet som vanlig.

Opprette en rapport

De -C. (kun oppsummering) Alternativ forårsaker strace. å skrive ut en rapport. Det genererer et bord for informasjon om systemanropene som ble gjort av det sporede programmet.

 Strace -C ./stex

Kolonnene er:

  • % tid : Prosentandelen av utførelsestiden som ble brukt i hvert systemanrop.
  • sekunder : Den totale tiden uttrykt i sekunder og mikrosekunder brukt i hvert systemanrop.
  • bruker / samtale : Den gjennomsnittlige tiden i mikrosekunder brukt i hvert systemanrop.
  • Samtaler : Antall ganger som hvert systemanrop ble henrettet.
  • feil : Antall feil for hvert systemanrop.
  • Syscall. : Navnet på systemanropet.

Disse verdiene vil vise nuller for trivielle programmer som utfører og avsluttes raskt. Real-World-verdier vises for programmer som gjør noe mer meningsfylt enn vår demonstrasjonsapplikasjon.

Dyp innsikt, enkelt

De strace. Output kan vise deg hvilke systemanrop som blir gjort, hvilke som blir gjort gjentatte ganger, og hvor mye kjøretid blir brukt i kjerne-side-koden. Det er flott informasjon. Ofte, når du prøver å forstå hva som skjer i koden din, er det lett å glemme at din binære samhandler nesten nonstop med kjernen for å utføre mange av sine funksjoner.

Ved bruk av strace. , ser du det komplette bildet.


Linux - Mest populære artikler

Slik behandler en fil linje for linje i et Linux Bash Script

Linux Feb 3, 2025

Fatmawati Achmad Zaenuri / Shutterstock Det er ganske lett å lese innholdet i en Linux tekstfil linje for linje i et shell script, så lenge du avtale med n..


Hva er nytt i Ubuntu 21.04 ‘hårete Hippo’

Linux Apr 22, 2025

Den splitter nye utgivelsen av Ubuntu 21.04. , Hirsute Hippo, ble utgitt 22. april 2021. Det er en foreløpig utgivelse av den populære Linux-distribusjonen, med bare ni mån..


Slik Oppdater Ubuntu Linux

Linux Aug 27, 2025

Tomeqs / Shutterstock.com. Trenger du den nyeste og største i Ubuntu-programvaren? Du trenger ikke å være en Linux Pro. Les videre for å oppdage hvordan ..


Hva er nytt i elementær OS 6 “Odin”

Linux Aug 14, 2025

Elementary, Inc. Det er Mange Linux-distribusjoner (Distros) som folk hevder er gode erstatninger for Windows eller MacOS. Men det er få som har det eksplis..


Hvordan slå av en Ubuntu PC

Linux Oct 12, 2025

Som alle personlige datamaskiner, kjører en PC Ubuntu. Desktop operativsystemet må være slått av nå og deretter. Slå av Ubuntu er enkelt, og du har flere metoder til din d..


Slik installerer Linux på en M1 Mac Med Apple Silicon

Linux Nov 11, 2024

Native Linux-støtte til Apples nye armbaserte arkitektur er ikke klar, men du kan kjøre Linux på en M1. , M1 pro, eller m1 maks ved hjelp av a virtuell maskin . De..


Hvordan legge til en bruker i Sudoers -filen i Linux

Linux Oct 30, 2025

Hvis en sudo Kommando på Linux får deg en melding om at en bruker "ikke er i Sudoers -filen," må du komme på "Sudoers" -listen. Vi vil gå gjennom å legge til en bruker til sudo..


5 Ubuntu Linux -funksjoner du bør bruke

Linux Dec 6, 2024

Ubuntu Linux er Feature Rich og kommer med et kuratert utvalg av forhåndsinstallert programvare. Grav bare litt dypere, så finner du noen funksjoner du burde bruke. Ubuntu -opplevel..


Kategorier