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 :