Linux sistem çağrılarını izlemek için strace nasıl kullanılır

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

Linux programları çekirdek Onlar için bazı şeyler yapmak için. NS atlatmak Komut bu sistem çağrılarını ortaya koyuyor. Programların nasıl çalıştığını ve neden bazen yapmadıklarını anlamak için bunları kullanabilirsiniz.

Çekirdek ve sistem çağrıları

Olabilecekleri kadar akıllı olarak, bilgisayar programları kendileri için her şeyi yapamaz. Onlar için belirli fonksiyonların yapılması talepleri yapmaları gerekir. Bu talepler Linux çekirdeğine gidiyor. Tipik olarak, programın çağrılarının ve kütüphanenin daha sonra bir sistem çağrısı olarak adlandırılan bir sistem çağrısı denilen bir kütüphane veya başka bir yazılım arayüzü var.

Sistemin bir programın yaptığını ve yanıtların ne olduğunu, sizi ilgilendiren veya yazdığınız programların iç işlerini anlamanıza yardımcı olabilir. Bu ne atlatmak yapmak . Sorunları gidermeye ve darboğazları aramaya yardımcı olabilir.

Bu aynı değil Bir uygulamayı hata ayıklama Gibi bir araçla gdb . Hata ayıklama programı, bir programın iç çalışmasını çalıştırdığı gibi araştırmanıza olanak sağlar. Programınızın mantığından geçmenize ve hafıza ve değişken değerleri incelemenizi sağlar. Karşılaştırma ile ne atlatmak Program çalıştığı için sistem arama bilgilerini yakalayın. İzlenen program sona erdiğinde, atlatmak Sistem çağrısı bilgilerini terminal penceresine listeler.

Sistem aramaları, dosyalar, öldürme işlemleri vb. Okuma ve yazma işlemleri gibi her türlü düşük seviyeli işlevselliği sağlar. Yüzlerce sistem çağrısının bir listesi var. syscalls adam sayfası .

İLGİLİ: GDB ile hata ayıklama: Başlarken

Strace yükleme

Eğer atlatmak Bilgisayarınıza zaten yüklenmemiş, çok kolay yükleyebilirsiniz.

Ubuntu'da, bu komutu kullanın:

 Sudo Apt Kurulumu Strace 

Fedora'da, bu komutu yazın:

 Sudo DNF Yükleme Strace 

Manjaro'da, komut:

 Sudo Pacman -Sy Strace 

Strace ile ilk adımlar

Göstermek için küçük bir program kullanacağız. atlatmak . Çok fazla yapmaz: Bir dosyayı açar ve bir metin satırını yazar ve içinde herhangi bir hata kontrolü yoktur. Bu sadece hızlı bir hack, böylece kullanacak bir şeyimiz var. atlatmak .

 #include & lt; stdio.h & gt;

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

  // Dosya Kolu
  Dosya * filegeek;

  // "strace_demo.txt" adlı bir dosyayı açın veya oluşturun
  filegeek = fopen ("strace_demo.txt", "w");

  // dosyaya biraz metin yaz
  fprintf (filegeek, "bunu dosyaya yaz");

  // dosyayı kapat
  fclose (filegeek);

  // Programdan Çık
  dönüş (0);

} // Ana'nın sonu 

Bunu "dosya-io.c" adlı bir dosyaya kaydettik ve onunla derledik. gcc çalıştırılabilir bir denilen stebex , adına " NS yarış eski Geniş. "

 gcc -o stex dosya-io.c 

Aramacağız atlatmak Komut satırından ve yeni yürütmemizin adını izlemek istediğimiz süreç olarak adlandırın. Linux komutlarından veya diğer ikili çalıştırılabilirlerin herhangi birini kolayca izleyebiliriz. Tiny programımızı iki nedenden dolayı kullanıyoruz.

İlk neden budur atlatmak verbose. Çok fazla çıktı olabilir. Kullandığında bu harika atlatmak Öfkeyle, ancak ilk başta ezici olabilir. Sınırlı var atlatmak Küçük programımız için çıktı. İkinci neden, programımızın sınırlı işlevselliğe sahip olması ve kaynak kodun kısa ve basit olmasıdır. Bu, çıktının hangi bölümlerinin programın iç çalışmalarının farklı bölümlerine atıfta bulunduğunu belirlemeyi kolaylaştırır.

 Strace ./stexГ67]
  

Açıkça görebiliriz yazı yazmak "Bunu dosyaya yaz" metnini gönderen sistem çağrısı açılan dosyamıza ve exit_group sistem çağrısı. Bu, uygulamadaki tüm iplikleri sonlandırır ve kabuğa geri dönüş değeri gönderir.

Çıkışın filtrelenmesi

Basit gösteri programımızda bile, çok fazla çıktı var. Kullanabiliriz -e (ifade) seçeneği. Görmek istediğimiz sistem çağrısının adını geçeceğiz.

 Strace -e. /StexГ67 yaz.
  

Birden fazla sistem çağrısını virgülle ayrılmış bir liste olarak ekleyerek rapor edebilirsiniz. Sistem aramaları listesinde herhangi bir boşluk dahil etmeyin.

 Strace -e Kapat, yaz ./stexГ67]
  

Çıktıyı bir dosyaya gönderme

Çıktıyı filtrelemenin faydası da çıkışı filtreleme ile ilgili bir sorundur. Görmek istediğini görüyorsun, ama başka bir şey görmüyorsun. Ve diğer çıktıların bazıları sizin için görmenizi istediğiniz şeylerden daha faydalı olabilir.

Bazen, her şeyi yakalamak ve arama yapmak ve tüm sonuç kümesi boyunca kaydırmak daha uygundur. Bu şekilde, yanlışlıkla önemli bir şeyi dışlamazsınız. NS (Çıktı) seçeneği, çıktıyı bir göndermenize izin verir. atlatmak bir metin dosyasına oturum.

 Strace -o trace-çıkış.txt ./stexГ67]
  

O zaman yapabilirsiniz kullan az emretmek Listeyi kaydırmak ve sistem çağrıları aramak-veya başka bir şeye göre.

 daha az trace-çıkış.txt 

Şimdi hepsini kullanabilirsin az Çıktıyı araştırmak için arama yetenekleri.

İLGİLİ: Linux'taki daha az komut nasıl kullanılır?

Zaman damgaları ekleme

Çıkışa birkaç farklı zaman damgası ekleyebilirsiniz. NS -r (Göreceli zaman damgaları) seçeneği, her ardışık sistem çağrısının başlangıcı arasındaki zaman farkını gösteren zaman damgaları ekler. Bu zaman değerlerinin önceki sistem çağrısında geçirilen zamanı ve programın bir sonraki sistem çağrısı yapmadan önce yaptığı her şeyi içereceğini unutmayın.

 strace -r ./stexГ67]
  

Zaman damgaları, her çıktı satırının başında görüntülenir.

Her sistem çağrısında harcanan zaman miktarını görmek için kullanın -T (Syscall-Times) seçeneği. Bu, her sistem çağrısında geçirilen zamanın süresini gösterir.

 Strace -t ./stexГ67]
  

Zaman süreleri, her sistem arama hattının sonunda gösterilir.

Her sistem çağrısının çağrıldığı zamanı görmek için kullanın -tt (mutlak zaman damgaları) seçeneği. Bu, bir mikrosekond çözünürlüğüne sahip "duvar saati" zamanını gösterir.

 strace -tt ./stexГ67]
  

Zamanlar her satırın başında görüntülenir.

Koşu sürecinin izlenmesi

İzlemek istediğiniz işlem zaten çalışıyorsa, yine de ekleyebilirsiniz atlatmak ona. Bunu yapmak için, işlem kimliğini bilmeniz gerekir. Yapabilirsiniz kullanmak ps ile birlikte grep Bunu bulmak için. Firefox'u çalıştırıyoruz. Kimliğini bulmak için firefox işlem, kullanabiliriz ps ve borulamak grep .

 PS -E | GREP Firefox 

İşlem kimliğinin 8483 olduğunu görebiliriz. -P (İşlem Kimliği) Söyleme seçeneği atlatmak hangi işlemi eklemek için. Kullanmanız Gereken Not Sudo :

 Sudo Strace -P 8483 

Bir bildirim göreceksiniz ki atlatmak Kendini sürece ekledi ve ardından sistem izleme aramaları terminal penceresinde her zamanki gibi gösterilecektir.

Rapor Oluşturma

NS -C (Yalnızca Özet) Seçenek Nedenler atlatmak Bir rapor yazdırmak için. İzlenen program tarafından yapılan sistem çağrıları hakkında bilgi için bir tablo oluşturur.

 STRACE -C ./STEXГ67]
  

Sütunlar şunlardır:

  • % zaman : Her sistem çağrısında geçirilen yürütme süresinin yüzdesi.
  • saniye : Saniyeler içinde ifade edilen toplam süre ve her sistem çağrısında geçirilen mikrosaniye.
  • USECS / ARAMA : Her sistem çağrısında geçirilen mikrosaniyede ortalama süre.
  • aramalar : Her sistem çağrısının yürütüldüğü zaman sayısı.
  • hatalar : Her sistem araması için başarısızlık sayısı.
  • syscall : Sistem çağrısının adı.

Bu değerler, hızlı bir şekilde yürüten ve sonlandıran önemsiz programlar için sıfırlar gösterecektir. Gerçek dünya değerleri, gösteri başvurumuzdan daha anlamlı bir şey yapan programlar için gösterilmektedir.

Derin görüşler, kolayca

NS atlatmak Çıktı, hangi sistem çağrılarının yapıldığını, hangilerinin tekrar tekrar yapıldığını ve çekirdek tarafı kodunda ne kadar yürütme süresinin harcandığını gösterebilir. Bu harika bilgiler. Genellikle, kodunuzun içinde neler olup bittiğini anlamaya çalıştığınızda, ikili sizin işlevlerinin çoğunu gerçekleştirmek için çekirdeği çekirdekle etkileşime girmeyi unutmak kolaydır.

Kullanarak atlatmak , tam resmin tamamını görüyorsunuz.


, Linux - En Popüler Makaleler

Linux için Grafik Aygıt Yöneticisi Nasıl Alınır

, Linux Mar 17, 2025

Afrika Stüdyosu / Shutterstock.com Sonsuz var Bilgisayarınızın donanımının ayrıntılarını gösteren Linux komut satırı yardımcı programlar�..


GNOME 40'taki Yenilikler?

, Linux Jul 23, 2025

GNOME VAKFI GNOME 40, yeni bir numaralandırma şemasına sahip. Yeni görünümüyle birlikte yeni bir çalışma yolu geliyor. Eski dikey metaforlar, yatay..


Linux'ta yerli oyun ölüyor olabilir ve bu tamam

, Linux Sep 27, 2025

DC Studio / Shutterstock.com NS Buhar güverte , Ağustos 2021'de açıklanan, Linux'ta oyunların geleceği hakkında konuşan Linux oyun çevreler..


Linux'ta Android uygulamaları nasıl çalıştırılır

, Linux Oct 19, 2025

Sessizbitler / Shutterstock.com Hiç Linux'ta bir Android uygulaması çalıştırmak istedim ancak hata ayıklama köprüler, geliştirme ortamları veya Side..


Yeni başlayanlar için 10 Temel Linux komutları

, Linux Oct 13, 2025

Sadece Linux'a başlamak? Komut satırı ile kendinizi rahat hale getirmek esastır. Komut satırı yardımcı programlarına zaten aşinassanız, Linux ve Mac'in çok yaygın olarak payla..


Linux'ta DNS nasıl yıkanır

, Linux Nov 14, 2024

İnternet tarama deneyiminiz Linux cihazınızda yavaş mı, yoksa ziyaret ettiğiniz web siteleri modası geçmiş mi yoksa yanlış web sitesi mi? Linux üzerindeki DNS önbelleğini yıkamay..


Pidof veya PGREP ile bir Linux işleminin PID'sini nasıl bulur

, Linux Nov 15, 2024

Bir Linux işlemi ile çalışmak genellikle işlem kimliğini veya PID'sini bilmek anlamına gelir. Her çalışan yazılım parçasına verilen benzersiz bir sayıdır. İşte ne olduğunu bu..


7 Hatalar Yeni Linux kullanıcıları (ve bunlardan nasıl kaçınılır)

, Linux Nov 11, 2024

Linux'u öğrenmek, her şeyin küçük bir şeyin bir savaş gibi hissettiği sinir bozucu bir deneyim olabilir. Bu yaygın hatalardan kaçınmak, Linux'un tanıtımını ve benimsenmesini ço..


Kategoriler