dreamping 发表于 2007-06-23 16:46

lsof 如何查看端口号,

当前有个java程序,出发点是为了找出pid,kill掉。考虑到系统中还运行其他java程序,不能简单的使用
kill-9 `ps -ef | grep java | awk '{print $2}'` 这样的方式。

这个程序侦听12345端口号,
netstat -an的输出是:
127.0.0.1.8005             *.*                0      0 49152      0 LISTEN
      *.32928            *.*                0      0 49152      0 BOUND
      *.12345               *.*                0      0 49152      0 LISTEN
没有pid信息。

据说lsof可以,
但是我搜索之后,有人说,命令
lsof -i :12345或者
lsof -i TCP@127.0.0.1:12345 或者
lsof -i | grep 12345
可以显示出来,
但是,我的系统(solaris10)上却都不行。


lsof -v的输出是:
lsof version information:
    revision: 4.77
    latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
    latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
    latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
    constructed: Sat Nov 4 06:19:47 EST 2006
    constructed by and on: steve@w1100z
    compiler: /usr/sfw/bin/gcc -m64
    compiler version: 3.4.6
    compiler flags: -Dsolaris=100000 -DHASPR_LDT -DHASIPv6 -DHASSOUXSOUA -DHAS_IPCLASSIFIER_H -DHAS_CRED_IMPL_H -DHAS_V_PATH -DHASZONES -DHASUTMPX -DHAS_VSOCK -DLSOF_VSTR="5.10" -O
    loader flags: -L./lib -llsof-lkvm -lelf -lsocket -lnsl
    system info: SunOS w1100z 5.10 Generic_118855-15 i86pc i386 i86pc Solaris
    Anyone can list all files.
    /dev warnings are enabled.
    Kernel ID check is enabled.
    Device cache file read-only paths:
      Named via -D: none
      Named in environment variable LSOFDEVCACHE: none
      Personal path format (HASPERSDC): "%h/%p.lsof_%L"
      Modified personal path environment variable: LSOFPERSDCPATH
      LSOFPERSDCPATH value: none
      Personal path: /.lsof_sol1
    Device cache file write paths:
      Named via -D: none
      Named in environment variable LSOFDEVCACHE: none
      Personal path format (HASPERSDC): "%h/%p.lsof_%L"
      Modified personal path environment variable: LSOFPERSDCPATH
      LSOFPERSDCPATH value: none
      Personal path: /.lsof_sol1

xq10907 发表于 2007-06-24 13:25

cd /proc

pfiles * >> any_name.file

在重定向的 any_name.file 文件中查找端口,就能找到对应的进程

dreamping 发表于 2007-06-24 19:41

# pfiles* >> /tmp/portfile.file
pfiles: cannot examine 4014: no such process
pfiles: cannot examine 4015: no such process
# vi /tmp/portfile.file


11: S_IFREG mode:0644 dev:55,64 ino:256407 uid:0 gid:0 size:0
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /opt/apache-tomcat-5.5.20/logs/host-manager.2007-06-22.log
12: S_IFSOCK mode:0666 dev:276,0 ino:29188 uid:0 gid:0 size:0
      O_RDWR
      SOCK_STREAM
      SO_REUSEADDR,SO_SNDBUF(49152),SO_RCVBUF(49152)
      sockname: AF_INET 0.0.0.0port: 12345
13: S_IFSOCK mode:0666 dev:276,0 ino:25410 uid:0 gid:0 size:0
      O_RDWR
      SOCK_STREAM
      SO_SNDBUF(49152),SO_RCVBUF(49152)
      sockname: AF_INET 0.0.0.0port: 12345
14: S_IFCHR mode:0644 dev:270,0 ino:78118918 uid:0 gid:3 rdev:149,1

没看到什么进程的pid啊?
这是个java程序,显示不出来具体的程序的名称,只显示java进程,但是又还存在其他java进程,又不能把java进程全部杀掉,只能是kill掉侦听12345端口的进程。
如何处理啊?

ga0feng 发表于 2007-06-25 09:50

但是,我的系统(solaris10)上却都不行。


怎么个不行法?为啥我的机器都行?

stormcc 发表于 2007-12-21 17:47

看一下自己lsof的版本号

看一下自己lsof的版本号

wj19383 发表于 2007-12-22 00:10

for i in`ps -ef | nawk '/java/&&!/ps/{print $2}'`;
do
   pfiles $i
done >info
//或加管道再进行处理,如| grep sock看打开的套接字

这样可以看到所有含java关键字的进程打开的文件描述符

tchmuzi 发表于 2011-04-04 22:26

我两台主机,都是solaris 10,一台用lsof -i:端口号有输出,另外一台没有输出,很郁闷,有高人指点不?

非凡公子 发表于 2011-04-05 11:20

那你两台机子都truss一下看看LOG有啥不同
truss -o 21.log lsof -i:21

xiaorui 发表于 2012-12-27 15:48

不是apache的问题。和os有关吧。用户limit修改没。
页: [1]
查看完整版本: lsof 如何查看端口号,