ストレープの使用方法Linuxシステムコールを監視する

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

Linuxプログラムはに尋ねます カーネル 彼らのためにいくつかのことをするために。 NS ストレープ コマンドはこれらのシステムコールを明らかにします。プログラムがどのように機能するのかを理解するためにそれらを使用することができます、そして時には彼らはそうではありません。

カーネルとシステム呼び出し

彼らがするかもしれないように、コンピュータプログラムは自分のためにすべてをすることができません。彼らはそれらのために実行された特定の機能を要求する必要があります。これらの要求はLinuxカーネルに行きます。通常、プログラムが呼び出すライブラリーまたは他のソフトウェア・インターフェース、およびライブラリは、適切な要求をシステム呼び出しからカーネルに呼び出します。

プログラムが作成したシステムと応答があなたが書いたプログラムの内部の働きを理解するのに役立つことができることをシステムに呼び出すことができることを確認できるようにすることができます。これは ストレープ NS 。問題をトラブルシューティングしてボトルネックを探すのに役立ちます。

これは同じではありません アプリケーションのデバッグ ツールのように gdb. 。デバッグプログラムでは、実行中のプログラムの内部操作を調査できます。それはあなたのプログラムのロジックをステップ実行し、メモリと変数値を調べます。比較すると、何 ストレープ プログラムが実行されているときにシステムコール情報をキャプチャします。トレースされたプログラムが終了すると、 ストレープ システム呼び出し情報を端末ウィンドウにリストします。

システムコールは、ファイル上の読み取りと書き込みアクション、削除プロセスなどのすべての種類の低レベル機能を提供します。に何百ものシステムコールのリストがあります Syscalls Man Page.

関連している: GDBによるデバッグ:はじめに

ストラップの取り付け

もしも ストレープ コンピュータにはすでにインストールされていませんが、非常に簡単にインストールできます。

Ubuntuでは、このコマンドを使用してください。

 SUDO APTインストールストレート

Fedoraで、このコマンドを入力します。

 SUDO DNFインストールストレート

Manjaroでは、コマンドは次のとおりです。

 SUDO PACMAN -SYストレープ

ストラップの最初のステップ

小さなプログラムを使って実証します ストレープ 。それほど多くはありません:それはファイルを開き、それにテキストの行を書き込み、それにエラーチェックを持っていません。それは私たちに何かを持っているようにすばやくハックです ストレープ

#include< stdio.h>

int main(int argc、char argv []){

  //ファイルハンドル
  ファイル* filegeek;

  // "strace_demo.txt"というファイルを開くか、またはそれを作成する
  fileGeek = fopen( "strace_demo.txt"、 "w");

  //ファイルにテキストを書きます
  fprintf(FileGeek、Filegeekファイルに書き込みます ");

  //ファイルを閉じます
  fclose(FileGeek);

  //プログラムを終了します
  戻る(0);

} //メインの終わり

これを「file-io.c」というファイルに保存し、それをコンパイルしました GCC. 実行可能ファイルに STEX 、 " NS 人種 十分な。"

 gcc -o stex file-io.c 

電話します ストレープ コマンドラインから、トレースしたいプロセスとして、新しい実行可能ファイルの名前を渡します。 Linuxコマンドやその他のバイナリ実行可能ファイルのどちらかを簡単にトレースできます。私たちは2つの理由で私たちの小さなプログラムを使っています。

最初の理由はそれです ストレープ 冗長です。多くの出力があります。使っているときそれは素晴らしいです ストレープ 怒りでは、それは最初は圧倒的になることがあります。制限があります ストレープ 私たちの小さなプログラムのための出力。 2番目の理由は、プログラムが機能性が限られており、ソースコードは短く直接的なものです。これにより、出力のどのセクションがプログラムの内部動作のさまざまな部分を参照するかを簡単に識別できます。

ストレート./stex 

私たちは明確に見ることができます 書きます システムコールテキストを「ファイルに書き込み」ファイルを開いたファイルと exit_group. システムコールこれにより、アプリケーション内のすべてのスレッドが終了し、戻り値をシェルに送り返します。

出力をフィルタリングする

私たちの単純なデモンストレーションプログラムでさえ、かなり多くの出力があります。私達はそれを使うことができます (式)オプション。私たちが見たいシステム呼び出しの名前を渡します。

ストレープ-E write ./stex 

それらをコンマ区切りリストとして追加することで、複数のシステムコールについて報告できます。システムコールのリストに空白スペースを含めないでください。

ストレート-E閉じる、書き込み./stex 

出力をファイルに送信します

出力をフィルタリングすることの利点も、出力のフィルタリングに関する問題です。あなたはあなたが見たことを見たことがわかりますが、他には見えません。そして他の出力のいくつかはあなたが見たように頼んだものよりもあなたにとってより役に立つかもしれません。

時々、すべてを捉え、結果のセット全体を検索してスクロールするのが便利です。そのように、あなたは誤って重要なものを除外しません。 NS - (出力)オプションを使用すると、出力を送信できます。 ストレープ テキストファイルへのセッション。

ストレート-o trace-output.txt ./stex 

それからあなたはできます 使用 以下 指図 リストをスクロールし、システムコールを検索するには、または名前別のものを検索します。

 trace-output.txt 

あなたはすべてを使うことができます 以下 出力を調べるための検索機能。

関連している: Linuxでlessコマンドを使用する方法

タイムスタンプを追加する

出力に複数の異なるタイムスタンプを追加できます。 NS -NS (相対タイムスタンプ)オプションは、各連続システムコールの開始時の時間差を示すタイムスタンプを追加します。これらの時間値には、以前のシステムコールに費やされた時間と、次のシステムコールの前にプログラムが実行していたことのあるものが含まれます。

ストレープ-R ./stex 

タイムスタンプは出力の各行の開始時に表示されます。

各システムコールに費やされた時間を確認するには、 -NS (syscall-times)オプション。これは各システムコールの内側に費やされた時間の持続時間を示しています。

ストレープ-T ./stex 

時間期間は各システムコールラインの最後に表示されます。

各システムコールが呼び出された時刻を確認するには、 ~tt. (絶対タイムスタンプ)オプション。これはマイクロ秒の解像度で「壁掛け時計」時間を示しています。

ストレープ-TT./stex 

時間は各行の開始時に表示されます。

実行中のプロセスを追跡する

トレースするプロセスがすでに実行されている場合は、まだ添付できます。 ストレープ それに。そうするためには、プロセスIDを知る必要があります。あなたはできる 使用する ps gr これを見つけるために。 Firefoxが実行されています。のIDを見つけるために Firefox. プロセス、私たちは使うことができます ps それを通ってパイプします gr

 PS -E | GREP Firefox 

プロセスIDが8483であることがわかります。 -NS (プロセスID) ストレープ どのプロセスに取り付けるプロセス。使用する必要があることに注意してください sudo.

 SUDOストレート-P 8483 

通知が表示されます ストレープ プロセスに自分自身を添付してから、通常どおりシステムトレース呼び出しが端末ウィンドウに表示されます。

レポートの作成

NS -NS (概要のみ)オプションの原因 ストレープ レポートを印刷する。トレースされたプログラムによって作成されたシステムコールについての情報については、テーブルを生成します。

ストレート-C ./stex 

列は次のとおりです。

  • % 時間 :各システムコールに費やされた実行時間の割合。
  • 秒数 :秒単位で表現された合計時間とマイクロ秒は、各システムコールに費やされました。
  • USECS /コール :各システムコールに費やされたマイクロ秒の平均時間。
  • 呼び出す :各システムコールが実行された回数。
  • 誤差 :各システムコールの失敗数。
  • sysc :システムコールの名前。

これらの値は、迅速に実行および終了する簡単なプログラムのゼロを表示します。実世界の値は、私たちのデモアプリケーションよりも意味があるプログラムのために表示されます。

深い洞察、簡単

NS ストレープ 出力はどのシステムコールが行われているかを表示し、どのシステムが繰り返し行われています。それは素晴らしい情報です。多くの場合、コードの内側に何が起こっているのかを理解しようとしているときは、バイナリがカーネルでほぼノンストップに対話していることを忘れるのが簡単です。

使用することによって ストレープ 、あなたは完全な絵を見ます。


Linux - 最も人気のある記事

Linuxでゾンビプロセスを殺す方法

Linux Nov 25, 2024

Fatmawati Achmad Zaenuri / Shutterstock 不十分なプログラムや不良を悪く行うことができるプログラム ゾンビプロセス L..


ユーザーにLinux上のパスワードを変更する方法

Linux Nov 4, 2024

Ilya Titchev / Shutterstock. パスワードは、セキュリティを考慮した鍵ストーンです。パスワードをリセットし、パスワード�..


どのようにLinux上のBashの「ヒアドキュメント」を使用する

Linux Mar 31, 2025

Fatmawati Achmad Zaenuri / Shutterstock 奇妙な名前の「ここに文書」という名前のLinux上のBashスクリプト内の入力/アウトリダイ�..


どのように使用制限付きシェルを制限するために、何のLinuxユーザはド

Linux Mar 25, 2025

Fatmawati Achmad Zaenuri / Shutterstock 制限されたシェルは、ユーザーアカウントがLinuxでできることを制限します。制限され�..


Linux上のBASH辞書とは何ですか、そしてそれらをどのように使用しますか?

Linux Jun 16, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com Bash辞書は、Linuxシェルスクリプトでハッシュマップと連想配列を与えます。独自のLi..


Linux Mintの更新通知を設定または無効にする方法

Linux Jul 9, 2025

Linux Mintの迷惑なアップデート通知が十分にありましたか?それとも、あなたがそれらをさらに見たいと思う最新の状態に滞在することにと�..


Linuxの「ルート」とは何ですか?

Linux Jul 7, 2025

Fatmawati Achmad Zaenuri / Shutterstock.com rootユーザーは、Linux Universeの中でリミットなしの権限を持つ最も強力なエンティテ�..


Linux上でどのように実行するためのAndroidアプリ

Linux Oct 19, 2025

QuietBits / ShutterStock.com LinuxでAndroidアプリを実行したいが、デバッグブリッジ、開発環境、またはサイドローディングア�..


カテゴリ