Solaris 資料一覧

プロセスが使用しているリソースを調べる(pfiles)

2007/11/27更新

対応バージョン: 8

pfilesを使用するとプロセスが使用しているファイルやソケットなどのリソースを調べることができる。

例)

# ps -ef|grep sshd
    root   320     1  0   Apr 14 ?        0:11 /usr/local/sbin/sshd

# pfiles 320
320:    /usr/local/sbin/sshd
  Current rlimit: 256 file descriptors
   0: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2
      O_RDWR|O_LARGEFILE
   1: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2
      O_RDWR|O_LARGEFILE
   2: S_IFCHR mode:0666 dev:85,0 ino:4415767 uid:0 gid:3 rdev:13,2
      O_RDWR|O_LARGEFILE
   3: S_IFDOOR mode:0444 dev:307,0 ino:63395 uid:0 gid:0 size:0
      O_RDONLY|O_LARGEFILE FD_CLOEXEC  door to nscd[202]
   4: S_IFSOCK mode:0666 dev:302,0 ino:5578 uid:0 gid:0 size:0
      O_RDWR|O_NONBLOCK
        sockname: AF_INET6 ::  port: 22
   5: S_IFSOCK mode:0666 dev:302,0 ino:5577 uid:0 gid:0 size:0
      O_RDWR|O_NONBLOCK
        sockname: AF_INET 0.0.0.0  port: 22

この例では3個のファイルをオープンし(0〜3)、2個のソケットをオープンしている(4〜5)ことが確認できる。

これを応用し、例えばすべてのプロセスがオープンしているポートを調べるには以下のようなスクリプトを実行すればよい。

for pid in `ps -aeo pid | grep -v "PID" | sort -n`
do
  pfiles ${pid} | egrep "^${pid}:|port:"
done

実行結果)

0:    sched
1:    /etc/init -
2:    pageout
3:    fsflush
59:   /usr/lib/sysevent/syseventd
65:   /usr/lib/picl/picld
116:  /usr/sbin/rpcbind
151:  /usr/sbin/inetd -s
      sockname: AF_INET6 ::  port: 21
      sockname: AF_INET6 ::  port: 23
      sockname: AF_INET 0.0.0.0  port: 42
      sockname: AF_INET 0.0.0.0  port: 514
: