Hisayoshi Kato's weblog at Sun Solution Center
door callを追ってみましょう。
システム/アプリケーションでよく見かけるdoor call(1対1で、server process内にある関数をたたく)なのですが、たとえば、svc.startd(1M)のdoorファイルを調べてみましょう(↓)。どんなアプリケーションで、どんなファイルを使ってdoorのやりとりをしているか?気になったりしませんか?(^^;(しません。。って周りにいわれます。。きっと私と同じように気になっている方がいると思います!!)たまに、コマンドのバグとかにひっかかるとdoor callをしたんだけど、コマンドがかえってきませんというようなバグに遭遇してしまう場合があります。というか、そのバグにあたったので、このブログを書いているかもしれませんが。。とにかく、1プロセスを追うコールではなくて、システムカーネルレベルで、すべてのアプリケーションのdoorコールを追ってみたい!
| # pfiles 1562 | grep door O_RDWR FD_CLOEXEC door to svc.configd[1144] O_RDWR FD_CLOEXEC door to svc.configd[1144] O_RDWR FD_CLOEXEC door to svc.configd[1144] O_RDWR FD_CLOEXEC door to svc.configd[1144] O_RDWR FD_CLOEXEC door to svc.startd[1562] O_RDWR FD_CLOEXEC door to svc.configd[1144] |
カーネルレベルのdoor_callをコールしている際に、取得されるディクリプタとdoor_lookupをとる相手(サーバー?)をDTraceを用いて取得してみます。
//door.d
|
#!/usr/sbin/dtrace -s
|
これを実行してみましょう。このスクリプトを実行する際に、pkill -9 svc.startdとかprtdiag(1M)とかしてみましょう。(何でもいいです。) そうすると下記のような出力結果が得られます。
| kato@kato-osol:~$ pfexec ./door.d dtrace: script './door.d' matched 3 probes ^C svcs /etc/svc/volatile/repository_door namefs /lib/svc/bin/svc.configd 1 svcs <unknown> doorfs /lib/svc/bin/svc.configd 9366 |
Posted at 04:05PM Jun 10, 2008 by katohisa in DTrace | Comments[0]
Tuesday Jun 10, 2008





