Hur man använder strace att övervaka Linux-system samtal

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

Linux-program frågar kärna att göra några saker för dem. De strace Command avslöjar dessa systemsamtal. Du kan använda dem för att förstå hur program fungerar och varför de inte gör det.

Kärnan och systemsamtalen

Så smart som de kanske är, kan datorprogram inte göra allt för sig själva. De måste göra förfrågningar om att få vissa funktioner som utförs för dem. Dessa förfrågningar går till Linux-kärnan. Vanligtvis finns det ett bibliotek eller annat programvarugränssnitt som programmet ringer och biblioteket gör det lämpliga förfrågan-kallade ett systemsamtal till kärnan.

Att kunna se systemet kallar att ett program har gjort och vad svaren var kan hjälpa dig att förstå de inre arbeten av program som intresserar dig eller som du har skrivit. Detta är Vad strace göra . Det kan hjälpa till att felsöka problem och leta efter flaskhalsar.

Detta är inte detsamma som Felsökning av en ansökan med ett verktyg som gdb . Ett felsökningsprogram låter dig undersöka den interna driften av ett program som det körs. Det låter dig gå igenom logiken i ditt program och inspektera minne och variabla värden. I jämförelse, vad strace Fångar systemsamtalsinformationen när programmet är igång. När det spårade programmet avslutas, strace Listar systemsamtalsinformationen till terminalfönstret.

Systemsamtal ger alla slags funktionalitet med låg nivå, t.ex. läs- och skrivåtgärder på filer, dödande processer, och så vidare. Det finns en lista över hundratals systemsamtal på syscalls man sida .

RELATERAD: Felsökning med GDB: Komma igång

Installera Strace

Om strace är inte redan installerat på din dator, du kan installera det väldigt enkelt.

På Ubuntu, använd det här kommandot:

 sudo apt installationstrace 

På Fedora skriver du det här kommandot:

 sudo dnf installationstrace 

På Manjaro är kommandot:

 sudo pacman -sy strand 

Första steget med Strace

Vi använder ett litet program för att visa strace . Det gör inte mycket: det öppnar en fil och skriver en rad text till den, och det har ingen fel kontroll i den. Det är bara en snabb hack så att vi har något att använda med strace .

 #include & lt; stdio.h & gt;

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

  // filhandtag
  File * Filegeek;

  // Öppna en fil som heter "Strace_Demo.txt", eller skapa den
  Filegeek = Fopen ("Strace_Demo.txt", "W");

  // Skriv lite text till filen
  FPRINTF (FilegEeek, "Skriv detta till filen");

  // stäng filen
  fclose (Filegeek);

  // Avsluta från programmet
  returnera (0);

} // slutet av huvudet 

Vi räddade detta i en fil som heter "FILE-IO.C" och sammanställde den med gcc in i en körbar kallad stex , namngiven för " st lopp ex riklig."

 GCC -O STEX FILE-IO.C 

Vi ringer strace Från kommandoraden och skicka namnet på vår nya körbara till det som den process som vi vill ha spårat. Vi kan lika enkelt spåra några av Linux-kommandona eller någon annan binär körbar. Vi använder vårt lilla program av två skäl.

Den första anledningen är det strace är verbose. Det kan finnas mycket produktion. Det är bra när du använder strace i ilska, men det kan vara överväldigande först. Det är begränsat strace Utgång för vårt lilla program. Den andra anledningen är att vårt program har begränsad funktionalitet, och källkoden är kort och okomplicerad. Detta gör det lättare att identifiera vilka delar av produktionen av de olika delarna av programmets interna arbete.

 Strace ./stex

Vi kan tydligt se skriva Systemsamtal Skicka texten "Skriv detta till filen" till vår öppnade fil och Exit_group systemsamtal. Detta avslutar alla trådar i applikationen och skickar ett returvärde tillbaka till skalet.

Filtrering av utgången

Även med vårt enkla demonstrationsprogram är det ganska mycket resultat. Vi kan använda -e (uttryck) alternativ. Vi skickar i namnet på det systemsamtal som vi vill se.

 Strace -e skriv ./stex

Du kan rapportera om flera systemsamtal genom att lägga till dem som en kommaseparerad lista. Inkludera inte någon blankutrymme i listan över systemsamtal.

 Strace -e nära, skriv ./stex

Skicka utmatningen till en fil

Fördelen med att filtrera utgången är också problemet med att filtrera utgången. Du ser vad du har bett att se, men du ser inget annat. Och en del av den andra utgången kan vara mer användbar för dig än de saker du har bett att se.

Ibland är det bekvämare att fånga allt och söka och bläddra igenom hela uppsättningen resultat. På det sättet kommer du inte av misstag utesluta något viktigt. De -o (Output) Alternativet låter dig skicka utmatningen från a strace session till en textfil.

 Strace -O Trace-Output.txt ./stex

Du kan då Använd mindre kommando För att bläddra igenom listan och söka efter systemsamtal - eller något annat-med namn.

 Mindre Trace-Output.txt 

Du kan nu använda alla mindre S sökfunktioner för att undersöka utgången.

RELATERAD: Hur man använder mindre kommando på Linux

Lägga till tidsstämplar

Du kan lägga till flera olika tidsstämplar till utgången. De -r (Relativ Timestamps) Alternativ lägger till tidsstämplar som visar tidsskillnaden mellan början av varje successivt systemsamtal. Observera att dessa tidsvärden kommer att innehålla den tid som spenderas i det föregående systemsamtalet och något annat som programmet gjorde före nästa systemsamtal.

 Strace -r ./stex

Tidsstämplarna visas i början av varje rad av utgång.

För att se hur mycket tid som spenderas i varje systemsamtal, använd -T (syscall-times) alternativ. Detta visar varaktigheten av tiden som spenderas inuti varje systemsamtal.

 Strace -t ./stex

Tidsvarna visas i slutet av varje systemsamtalslinje.

För att se den tidpunkt då varje systemsamtal kallades, använd -TT (Absolute Timestamps) alternativ. Detta visar tiden "Wall Clock", med en mikrosekond upplösning.

 Strace -tt ./stex

Tiderna visas i början av varje rad.

Spåra en löpande process

Om processen du vill spåra redan kan du fortfarande bifoga strace till det. För att göra det måste du veta process-id. Du kan använda sig av f med greppa att hitta det här. Vi har Firefox-körning. För att ta reda på ID för fyrfox process, vi kan använda f och rör det igenom greppa .

 ps -e | Grep Firefox 

Vi kan se att process-id är 8483. Vi använder -p (Process ID) alternativ att berätta strace vilken process som ska bifogas. Observera att du behöver använda sudo :

 Sudo Strace -p 8483 

Du får se en anmälan som strace har bifogat sig för processen, och sedan visas systemets spårsamtal i terminalfönstret som vanligt.

Skapa en rapport

De -c (Endast Sammanfattning) Alternativ Orsaker strace att skriva ut en rapport. Det genererar ett bord för information om systemsamtal som gjordes av det spårade programmet.

 Strace -c ./stex

Kolumnerna är:

  • % tid : Procentandelen av den exekveringstid som spenderades i varje systemsamtal.
  • sekunder : Den totala tiden som uttryckts i sekunder och mikrosekunder som spenderas i varje systemsamtal.
  • usecs / call : Den genomsnittliga tiden i mikrosekunder som spenderas i varje systemsamtal.
  • samtal : Antalet gånger som varje systemsamtal utfördes.
  • fel : Antalet misslyckanden för varje systemsamtal.
  • syscall : Namnet på systemsamtalet.

Dessa värden visar nollor för triviala program som utför och avslutas snabbt. Real-world-värden visas för program som gör något mer meningsfullt än vår demonstrationsapplikation.

Djupt insikter, enkelt

De strace Utgången kan visa vilka systemsamtal som görs, vilka görs upprepade gånger och hur mycket exekveringstid spenderas inuti kärnkod. Det är bra information. Ofta, när du försöker förstå vad som händer i din kod, är det lätt att glömma att din binära interagerar nästan nonstop med kärnan för att utföra många av dess funktioner.

Genom att använda strace , du ser den fullständiga bilden.


Linux - Mest populära artiklar

Hur Kill Zombie processer på Linux

Linux Nov 25, 2024

Fatmawati Achmad Zaenuri / Shutterstock Program som är dåligt skrivna eller utförs dåligt kan lämna Zombie processer lurar inuti din Linux-dato..


Hur att bearbeta en fil rad för rad en Linux Bash Script

Linux Feb 3, 2025

Fatmawati Achmad Zaenuri / Shutterstock Det är ganska lätt att läsa innehållet i en Linux-textfil rad för rad i ett skalskript-så länge du handskas me..


Hur man använder ”här Documents” i Bash på Linux

Linux Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock Den konstigt namngivna "här dokument" låter dig använda inmatning / ut omdirigering inuti bash-skript på Linux. De ..


Så här använder Restricted Shell begränsa vad en Linux användare kan göra

Linux Mar 25, 2025

Fatmawati Achmad Zaenuri / Shutterstock Ett begränsat skal gränser vad ett användarkonto kan göra på Linux. En begränsad användare kan inte ändra der..


Vad är ”root” på Linux?

Linux Jul 7, 2025

fatmawati achmad zaenuri / shutterstock.com Rotanvändaren är den mest kraftfulla enheten i Linux-universum med obegränsade krafter, för bättre eller sä..


Hur man spolar DNS i Linux

Linux Nov 14, 2024

Är din internet -surfupplevelse långsam på din Linux -enhet, eller är de webbplatser du besöker föråldrade eller fel webbplats helt? Låt oss diskutera Flushing DNS -cachen på Linux och..


Hur man lägger till en användare i sudoers -filen i Linux

Linux Oct 30, 2025

Om en sudé Kommando på Linux ger dig ett meddelande om att en användare "inte finns i sudoers -filen", måste du komma på "sudoers" -listan. Vi kommer att gå igenom att lägga t..


10 användbara exempel på Linux RSYNC -kommandot

Linux Oct 24, 2025

Linux rsync Kommando är ett kraftfullt filkopierings- och mappsynkroniseringsverktyg. Här är tio vanliga användningsfall som du kommer att kunna utnyttja dina egna system. ..


Kategorier