[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:24685] Re: about nscd



すやまです。

> 
> # fork 先もトレースするオプションがあったのですね。
> しかし、-f -F をつけても strace の結果に変わりはありませんでした。
> 
>                                             Daisuke Yamashita
>                          http://village.infoweb.ne.jp/%7Edais/

時間があったので検証してみました。

  PID TTY      STAT   TIME COMMAND
 3044 ttyp0    S      0:00 /usr/sbin/nscd
 3040 ttyp0    S      0:00 /usr/sbin/nscd
 3045 ttyp0    S      0:00 /usr/sbin/nscd
 3046 ttyp0    S      0:00 /usr/sbin/nscd
 3048 ttyp0    S      0:00 /usr/sbin/nscd
 3049 ttyp0    S      0:00 /usr/sbin/nscd
 3050 ttyp0    S      0:00 /usr/sbin/nscd

この状態で、
$ sudo strace -eopen,close -p 3040 -p 3045 -p 3046 -p 3048
  -p 3049 -p 3050
とやってping foo すると、nscd起動後の一回だけ、

[pid   3040] open("/etc/hosts", O_RDONLY) = 4
[pid   3040] close(4)                    = 0
[pid   3040] open("/etc/ld.so.cache", O_RDONLY) = 4
[pid   3040] close(4)                    = 0
[pid   3040] open("/lib/libnss_dns.so.2", O_RDONLY) = 4
[pid   3040] close(4)                    = 0
[pid   3040] open("/lib/libresolv.so.2", O_RDONLY) = 4

と表示されて、後はping先が既知ならなにもopenしない、ping先が未知なら/etc/hosts
のみをopenしてるようです。libnss_dns,libresolve が/etc/ld.so.cacheに乗っちゃう
んで、リゾルバ周りの設定が変わった場合は、nscdを再起動するしかなさそうですね。

にしてもstraceってコマンド、
$ sudo strace -eopen,close -f -p 3040
とやって親プロセスだけ指定するとなにも出ないで、子プロセスも全部指定して始めて
親プロセス[pid 3040]のシステムコールが追跡できるのが、なんかミステリアス。

-- 
SETAGAYA\suyama@xxxxxxxxxxxxx/SLIMの意味なしシグネイチャ〜
  _/ 最近買ったCD _/ Kate Bush  - The Kick Inside
  _/ 最近見た映画 _/ 最近見てない