LoginSignup
0

More than 3 years have passed since last update.

posted at

systemtap小ネタ

思い付いた/思い出したら追記します。時代はeBPFなのかも知れないけれど、old typeなのでまだまだsystemtapでがんばります。

begin/endプローブ

beginは、スクリプト起動時に実行される。stapコマンド起動時に-vオプションを忘れると、いつスクリプトの実行が開始されたか分からないので、私はいつもbeginでprintfを実行するようにしている。

endは終了時に実行される。Ctrl-Cで止めたときも実行されるので、統計を溜めておいて適当な時間後にCtrl-Cを押して結果を表示する、という使い方ができる。

probe begin {
  printf("Script starting\n");
}

probe end {
  printf("Result: %d\n", counter);
}

コマンドライン引数

stapコマンド起動時に引数を与えられる。第1引数は\$1、第2引数は\$2、...。@1、@2という形式で書くと、文字列扱い。

arg.stp
probe begin{
  printf("1st arg: %d\n", $1);
  printf("2nd arg: %s\n", @2);
}

実行例

$ sudo stap arg.stp 1 2
1st arg: 1
2nd arg: 2

引数はモジュールに定数として埋め込まれるようで、引数を変えるとスクリプトは再コンパイルされる。同じ引数を与えると、キャッシュが使われる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0