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 cd /proc
pfiles * >> any_name.file
在重定向的 any_name.file 文件中查找端口,就能找到对应的进程 # 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端口的进程。
如何处理啊? 但是,我的系统(solaris10)上却都不行。
怎么个不行法?为啥我的机器都行?
看一下自己lsof的版本号
看一下自己lsof的版本号 for i in`ps -ef | nawk '/java/&&!/ps/{print $2}'`;do
pfiles $i
done >info
//或加管道再进行处理,如| grep sock看打开的套接字
这样可以看到所有含java关键字的进程打开的文件描述符 我两台主机,都是solaris 10,一台用lsof -i:端口号有输出,另外一台没有输出,很郁闷,有高人指点不? 那你两台机子都truss一下看看LOG有啥不同
truss -o 21.log lsof -i:21 不是apache的问题。和os有关吧。用户limit修改没。
页:
[1]