原文写于2010-05-18 19:42:46 网易博客,已删除.
测试机上要部署一整套产品,结果各个子产品都对外服务,占用了不少端口,而常用的那几个时不时的就被占用了.有时候还是先前部署的产品的老版本因为没停掉,就一直占用着端口.想停,但不确定是哪个是启动,哪个没启动,而且也没法停,只能杀进程.但偏偏不知道进程号.
以前听一个同事说用lsof能判断到底那个程序占了哪个端口.周末趁着自己闲着,公司那台solaris机子有没有人用.我就自己给它上面装了个lsof.下面就说说安装过程.
先去sunfreeware上面下载了lsof的编译好的package包.然后上传到服务器上;
接下来用tar -xvf解压.完成后直接释放出一个文件lsof_0508-4.80-sol10-x86-local;
然后用su root登陆,成功后用pkgadd -d lsof_0508-4.80-sol10-x86-local安装lsof;
中间可能有些选项,要么选yes,也么就选all,反正大体上就这样了.
安装完成后退出su模式,返回到普通用户,运行which lsof看看能否找到lsof的安装位置,能找到就说明可以直接用了.不能找到则说明还没有把lsof的安装位置加到用户的环境变量中.在用户$HOME目录下,修改.profile,在里面设置$PATH变量,把lsof安装位置加进去即可.比如:
$PATH=$PATH:/usr/local/bin
补充:原先我的用户下没有.profile文件,这个文件是我从用户目录下的local.profile拷贝过来的.
我自己由于先前把/usr/local下的一系列目录加到path变量中,所以运行which lsof之后就找到lsof的安装路径了.
之后运行lsof ,发现可以使用了.:-)
以下引用一下ibm技术文章中的一段关于lsof的描述:
在UNIX环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”。通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件。在有些情况下,当您使用 ls 请求目录清单时,将出现相应的条目。在其他情况下,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为 lsof,它对应于“list open files”(列出打开的文件)。
2011-07-02 补充:
sunfreeware上有sparc和x86的两种不同的制作好的包,安装前需要自己区分清楚自己所要安装的机器的架构.命令是
isainfo -bv
本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/07/02/2096345.html,如需转载请自行联系原作者