ホーム > パッケージ・システム管理 > strace

strace: システムコールとシグナルのトレース

straceは、Linuxでプロセスが実行するシステムコール(syscall)と受信するシグナルをトレースおよび記録する強力な診断ツールです。これにより、プログラムがカーネルとどのように相互作用するかを詳細に把握でき、デバッグ、パフォーマンス分析、セキュリティ監査などに役立ちます。

概要

straceは、特定のコマンドを実行するか、実行中のプロセスにアタッチして、そのプロセスのすべてのシステムコールとシグナルイベントをリアルタイムで出力します。これは、ファイルI/O、ネットワーク通信、メモリ管理など、プログラムの低レベルな動作を理解するために不可欠です。

主な機能

  • プロセスのシステムコールとシグナルのトレース
  • 各コールの引数、戻り値、エラーコードの表示
  • 実行中のプロセスへのアタッチによるトレース
  • 子プロセスも一緒にトレース
  • 特定のシステムコールまたはシグナルのフィルタリング

主なオプション

straceは、さまざまなオプションを使用して、トレース方法と出力形式を細かく制御できます。

基本トレースオプション

出力制御

フィルタリング

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`strace` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

straceを活用した様々な使用例です。

簡単なコマンドのトレース

strace ls

`ls`コマンドのシステムコールをトレースします。

トレース結果をファイルに保存

strace -o date_trace.log date

`date`コマンドのシステムコールを`date_trace.log`ファイルに保存します。

実行中のプロセスをトレース

strace -p 12345

PIDが12345のプロセスにアタッチしてシステムコールをトレースします。(PIDは実際のプロセスIDに置き換えてください。)

子プロセスまでトレース

strace -f bash -c "echo Hello, strace!"

`bash`シェルで`echo`コマンドを実行する際、`bash`と`echo`両方のシステムコールをトレースします。

特定のシステムコールのみフィルタリング

strace -e trace=open,read,write cat /etc/hosts

`cat /etc/hosts`コマンドが`open`, `read`, `write`システムコールを使用しているかをトレースします。

システムコールの所要時間確認

strace -T ls

各システムコールにかかった時間を一緒に表示します。

インストール

straceは多くのLinuxディストリビューションにデフォルトで含まれていない場合があります。次のコマンドを使用してインストールできます。

Debian/Ubuntu

sudo apt update && sudo apt install strace

APTパッケージマネージャーを使用してインストールします。

CentOS/RHEL 7

sudo yum install strace

YUMパッケージマネージャーを使用してインストールします。

Fedora/RHEL 8+

sudo dnf install strace

DNFパッケージマネージャーを使用してインストールします。

ヒントと注意点

straceは強力ですが、使用する際にはいくつかの考慮事項があります。

パフォーマンスへの影響

straceはプロセスのシステムコールをインターセプトするため、トレース対象プログラムのパフォーマンスにかなりの影響を与える可能性があります。特にI/Oが多いプログラムではその傾向が顕著です。本番環境での使用には注意が必要です。

出力の解釈

straceの出力は非常に膨大になることがあるため、必要な情報のみをフィルタリング(-e)するか、ファイルに保存(-o)して分析することをお勧めします。特定のシステムコールに関する詳細情報は、`man 2 <syscall_name>`コマンドで確認できます。

権限

他のユーザーのプロセスをトレースしたり、システム全体の動作をトレースしたりするには、`root`権限が必要です。

デバッグツールとの違い

straceはシステムコールレベルで動作し、`gdb`のようなデバッガとは異なり、プログラム内部の変数や関数呼び出しを直接操作したり、スタックトレースを表示したりすることはできません。両ツールは相互に補完的に使用できます。


同じカテゴリのコマンド