Comment utiliser la strace pour surveiller les appels système Linux

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

Programmes Linux Demandez à la noyau faire certaines choses pour eux. Les strace La commande révèle ces appels système. Vous pouvez les utiliser pour comprendre comment les programmes fonctionnent et pourquoi, parfois, ils ne le font pas.

Le noyau et le système appelle

Aussi intelligent que possible, les programmes informatiques ne peuvent pas tout faire pour eux-mêmes. Ils doivent faire des demandes d'avoir certaines fonctions effectuées pour eux. Ces demandes vont au noyau Linux. En règle générale, il y a une bibliothèque ou une autre interface logicielle que le programme appelle, et la bibliothèque appelle ensuite la demande appropriée appelée appel au noyau.

Être capable de voir le système appelle qu'un programme a fait et quelles étaient les réponses peut vous aider à comprendre le fonctionnement interne des programmes qui vous intéressent ou que vous avez écrit. C'est Quel strace Est-ce que . Cela peut aider à résoudre les problèmes et à rechercher des goulots d'étranglement.

Ce n'est pas la même chose que Déboguer une demande avec un outil comme gdb . Un programme de débogage vous permet d'enquêter sur le fonctionnement interne d'un programme tel qu'il est exécuté. Il vous permet de passer à travers la logique de votre programme et d'inspecter la mémoire et les valeurs variables. Par comparaison, quoi strace Capturez-vous les informations d'appel système car le programme est en cours d'exécution. Lorsque le programme tracé se termine, strace Répertorie les informations d'appel système à la fenêtre du terminal.

Les appels système fournissent toutes sortes de fonctionnalités de bas niveau, telles que la lecture et l'écriture d'actions sur les fichiers, les processus de tuerie, etc. Il y a une liste de centaines d'appels système sur le SysCalls Man Page .

EN RELATION: Débogage avec GDB: Mise en route

Installation de la ronde

Si strace N'est déjà déjà installé sur votre ordinateur, vous pouvez l'installer très facilement.

Sur Ubuntu, utilisez cette commande:

 Sudo apt install install strace 

Sur Fedora, tapez cette commande:

 Sudo DNF Installation Strace 

Sur Manjaro, le commandement est:

 Sudo Pacman -Sy Strace 

Premiers pas avec la strace

Nous utiliserons un petit programme pour démontrer strace . Cela ne fait pas grand chose: il ouvre un fichier et écrit une ligne de texte à ce sujet, et il n'a aucune erreur d'erreur. C'est juste un piratage rapide pour que nous ayons quelque chose à utiliser avec strace .

 #include & lt; stdio.h & gt;

int Main (int Argc, chargeur []) {

  // poignée de fichier
  Fichier * FileGeek;

  // ouvre un fichier appelé "strace_demo.txt" ou le créer
  FileGeek = fopen ("strace_demo.txt", "w");

  // écrit du texte dans le fichier
  fprintf (FileGeek, "Ecrivez ceci dans le fichier");

  // Fermez le fichier
  fcfrose (FileGeek);

  // sortie du programme
  retour (0);

} // FIN DE MAIN 

Nous l'avons sauvegardé dans un fichier appelé "fichier-io.c" et l'a compilée avec gcc dans un exécutable appelé stose , Nommé pour " style course ex ample."

 GCC -O File STEX-IO.c 

Nous allons appeler strace De la ligne de commande et transmettez le nom de notre nouvel exécutable comme processus que nous voulons avoir tracé. Nous pourrions simplement suivre facilement l'une des commandes Linux ou tout autre exécutable binaire. Nous utilisons notre petit programme pour deux raisons.

La première raison est que strace est verbose. Il peut y avoir beaucoup de production. C'est génial quand vous utilisez strace En colère, mais cela peut être écrasant au début. Il y a limité strace Sortie pour notre petit programme. La deuxième raison est que notre programme a une fonctionnalité limitée et que le code source est court et direct. Cela facilite l'identification de quelles sections de la sortie se réfèrent aux différentes parties du fonctionnement interne du programme.

 strace ./stex

Nous pouvons clairement voir la écrivez appel système Envoi du texte "Ecrivez ceci dans le fichier" à notre fichier ouvert et à la Exit_group Appel système. Ceci met fin à tous les threads de l'application et envoie une valeur de retour à la coquille.

Filtrer la sortie

Même avec notre programme de démonstration simple, il y a beaucoup de résultats. Nous pouvons utiliser le --e (expression) option. Nous passerons au nom de l'appel système que nous voulons voir.

 Strace -e écrire ./stex

Vous pouvez signaler plusieurs appels système en les ajoutant sous forme de liste séparée par des virgules. N'incluez pas de blancheur dans la liste des appels système.

 Strace -e Fermer, écrivez ./stex

Envoi de la sortie à un fichier

L'avantage de filtrer la sortie est également le problème de filtrage de la sortie. Vous voyez ce que vous avez demandé de voir, mais vous ne voyez rien d'autre. Et une partie de cette autre sortie pourrait vous être plus utile que celle que vous avez invitée à voir.

Parfois, il est plus pratique de tout capturer et de rechercher et de faire défiler tout l'ensemble des résultats. De cette façon, vous n'exclure pas accidentellement quelque chose d'important. Les -o L'option (sortie) vous permet d'envoyer la sortie d'un strace Session à un fichier texte.

 Strace -o Trace-Sortie.txt ./stex

Vous pouvez alors Utilisez le moins commander Pour faire défiler la liste et rechercher des appels système - ou quelque chose d'autre par nom.

 Moins Trace-Output.txt 

Vous pouvez maintenant utiliser tous moins Capacités de recherche de la recherche d'enquête sur la sortie.

EN RELATION: Comment utiliser la commande moins sur Linux

Ajouter des horodatages

Vous pouvez ajouter plusieurs horodatages différents à la sortie. Les -R (horodatage relatif) L'option ajoute des horodatages montrant la différence de temps entre le début de chaque appel système successif. Notez que ces valeurs de temps incluront le temps passé dans l'appel du système précédent et tout ce que le programme faisait avant le prochain appel système.

 strace -r ./stex

Les horodatages sont affichés au début de chaque ligne de sortie.

Pour voir la quantité de temps passée dans chaque appel système, utilisez le -T Option (SysCall-Times). Cela montre la durée du temps passé à l'intérieur de chaque appel système.

 strace -t ./stex

Les durées de temps sont affichées à la fin de chaque ligne d'appel système.

Pour voir l'heure à laquelle chaque appel système a été appelé, utilisez le -tt option (horodatage absolu). Cela montre l'heure "Horloge murale", avec une résolution de microseconde.

 strace -tt ./stex

Les temps sont affichés au début de chaque ligne.

Tracer un processus de course

Si le processus que vous souhaitez tracer est déjà en cours d'exécution, vous pouvez toujours attacher strace à cela. Pour ce faire, vous devez connaître l'ID de processus. Vous pouvez utilisation ps avec grep trouver ceci. Nous avons Firefox en cours d'exécution. Pour découvrir l'ID de la firefox processus, nous pouvons utiliser ps et la pipe à travers grep .

 PS -E | grep firefox 

Nous pouvons voir que l'ID de processus est 8483. Nous allons utiliser le -p (ID de processus) Option à raconter strace quel processus attacher à. Notez que vous devrez utiliser sudo :

 Sudo Strace -P 8483 

Vous verrez une notification que strace s'est attachée au processus, puis les appels de trace du système seront affichés dans la fenêtre du terminal comme d'habitude.

Création d'un rapport

Les -c (Résumé uniquement) Option Causes strace imprimer un rapport. Il génère une table pour des informations sur les appels système effectués par le programme tracé.

 strace -c ./stex

Les colonnes sont:

  • % temps : Le pourcentage du temps d'exécution passé dans chaque appel système.
  • secondes : Le temps total exprimé en secondes et les microsecondes dépensés dans chaque appel système.
  • USECS / CALL : Le délai moyen des microsecondes a passé dans chaque appel système.
  • appels : Le nombre de fois que chaque appel système a été exécuté.
  • les erreurs : Nombre d'échecs pour chaque appel système.
  • syscall : Le nom de l'appel système.

Ces valeurs montreront des zéros pour des programmes triviaux exécutés et terminés rapidement. Les valeurs du monde réel sont présentées pour des programmes qui font quelque chose de plus significatif que notre demande de démonstration.

Des idées profondes, facilement

Les strace La sortie peut vous montrer quels appels système sont fabriqués, lesquels sont faits à plusieurs reprises et la quantité de temps d'exécution consacrée à l'intérieur du code côté noyau. C'est une grande information. Souvent, lorsque vous essayez de comprendre ce qui se passe à l'intérieur de votre code, il est facile d'oublier que votre binaire interagit presque sans escale avec le noyau pour effectuer de nombreuses fonctions.

En utilisant strace , vous voyez la photo complète.


Linux - Most Popular Articles

Comment utiliser le navigateur DB pour SQLite sur Linux

Linux Dec 16, 2024

Fatmawati Achmad Zaenuri / Shutterstock [dix] Navigateur DB pour SQLite Vous permet d'afficher et d'éditer des bases de données SQLITE sur Linu..


Comment verrouiller votre Mac à l'aide de la borne

Linux Feb 16, 2025

L'une des premières règles de la cybersécurité est de toujours verrouiller votre ordinateur avant de vous enlever. Bien que ce ne soit peut-être pas le moyen le plus rapide, vous po..


Comment utiliser "ici Documents" à Bash sur Linux

Linux Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock [dix] Les "voici des documents" étrangement nommés vous permettent d'utiliser la redirection d'entrée / sortie à ..


Quoi de neuf à Ubuntu 21.04 'Hippo Hippo'

Linux Apr 22, 2025

La toute nouvelle version de Ubuntu 21.04 Le Hippo Hippo a été libéré le 22 avril 2021. C'est une libération provisoire de la popularité de distribution Linux, avec seul..


Le jeu indigène sur Linux peut être en train de mourir, et c'est bon

Linux Sep 27, 2025

DC Studio / Shutterstock.com [dix] Les Terrasse à vapeur , annoncé en août 2021, a des cercles de jeu Linux parlant de l'avenir du jeu sur ..


Quoi de neuf à Ubuntu 21.10 'Impish Indri'

Linux Oct 14, 2025

Canonique [dix] Ubuntu 21.10 "Impish Indri" était publié Le 14 octobre 2021. Il dispose Gnome 40 , un nouveau noyau et des applications..


Pouvez-vous installer Linux sur un M1 d'Apple Silicon Mac?

Linux Nov 12, 2024

Tout le monde n'achète pas un Mac pour exécuter uniquement des macos. La mauvaise nouvelle est que, à compter du novembre 2021, le soutien de Linux natif sur Apple Silicon n'est pas e..


Comment intégrer les applications et les scripts à un bureau Linux

Linux Oct 10, 2025

Sur Linux, une application sans fichier de bureau ne s'intègre pas à votre environnement de bureau. La plupart des applications en fournissent une, mais parfois vous devrez en créer une. C'e..


Catégories