一)使用lsof命令lsof是一个十分强悍的linux工具linux查看哪个程序占用端口,她被拿来查找什么程序使用了这些文件。在linux系统下,基本上所有的东西都可以被当成文件来用。socket其实也是一种文件了。所以lsof可以拿来查找谁用了某一个端口。具体方式:lsof-i:port_number|grep"(LISTEN)"-i是拿来查找和中国络相关的文件,":"号是必须的,它是标志你查找的是一个端口。port_number就是你要查找的端标语,例如你要查找是否有程序占用了oracle的窃听端口一5二一,就可以使用lsof-i:一5二一|grep"(LISTEN)"。假如有程序早已占用了,这么下边复印的第二个数组就是该程序的进程id,第一个数组是进程的名子。假如只有losf-i:port_number可能会查到好多应用程序,但这种程序实际并没有占用你指定的端口,这种端口只是联接到本机器或则别的机器的该端口。所以要grep"(LISTEN)“,由于一个端口只可能被一个程序占用的,所以这些方式是可靠的。二)使用netstat命令你们一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口。并且netstat-an的确提供了这些功能。所以有问题了一定要想到先去查找man指南,不过说实话,个别man指南写得让中国人看不懂,那没有办法了,就googe或则baidu一下吧。执行mannetstat命令,你会发觉netstat提供了'-p'的选项,这个选项的功能是告诉你那个程序占用了该端口,然而她提供的方式比较奇特是以pid/process_name提供的。pid其实是进程id了,process_name是进程的命令,中间以'/'号分隔。和里面的诱因一样,我们只查找listen的端口,netstat给我们提供了-l的选项,这个选项不是默认的选项。下边以一5二一端口来看如何查找到该程序,我们使用下边的命令:netstat-lnp|awk'BEGIN{prt=":一5二一$"}{if($四~prt)print$0}'在这儿使用awk来匹配第四个数组的模式是为了防止错判
在网路程序的调试过程中,常常发生一些超乎预料的事情,例如创建一个tcp服务失败,这时侯常常须要查看系统的网路情况,最常用的网路抓包其实非wireshark模式。但常常好多时侯只须要查看某个端口的使用情况,它究竟被哪个进程(对应pid)占用了,或则你还须要把它kill掉。假如你在windows操作系统,你可以使用netstat命令来查询pid,之后可以打开任务管理器,查看这个pid对应的进程名;假如pid没有显示,菜单》查看》选择列》选中pid即可;得悉进程后,我们可以将进程杀掉。下边我简单描述一下我所了解的在windows和linux系统下处理方法。(如果我们须要确定谁占用了我们的9010端口)1、windows平台
在windows控制台窗口下执行:
netstat-fú|findstr9010
tcp127.0.0.1:90100.0.0.0:0listening3017
你看见是pid为3017的进程占用了9010端口,假如进一步你想晓得它的进程名称,你可以使用如下命令:
tasklist|findstr3017
假如你想杀害这个进程,你其实可以用上面描述的那个方式,在任务管理器里把它kill了,但若果你喜欢高效一点,这么用taskkill命令就可以了。
taskkill/pid3017
这么这个进程就灰灰湮没了:)2、linux
假如你是个linux爱好者linux运维最佳实践,那种这个命令你应当很熟了,
netstat-pan|grep9010
假如你稍为仔细一点,你会发觉,用的都是netsta命令,事实上,netstat是一个比较通用的网路统计命令,几乎适用于所有现今流行的操作系统,无论是linux,window,还是其他unix,或则unix-like操作系统,并且用法基本一致。
下边是一个对windows系统中netstat命令行参数的详尽解释。格式:netstat[-a][-e][-n][-o][-pprotocol][-b][-r][-s][-v][interval]参数说明:-a显示所有联接和窃听端口。
-n以数字方式显示地址和端标语。
-o显示与每位联接相关的所属进程id。
-p在windows系统中,该选项用于指定默认情况的子集。proto显示proto指定的合同的联接;proto可以是下述合同之一:tcp、udp、tcpv6或udpv6。
假如与-s选项一起使用以显示按合同统计信息红旗linux系统下载,proto可以是下述合同之一:
ip、ipv6、icmp、icmpv6、tcp、tcpv6、udp或udpv6。
-b显示包含于创建每位联接或窃听端口的可执行组件。在个别情况下已知可执行组件拥有多个独立组件,但是在这种情况下;包含于创建联接或窃听端口的组件序列被显示。这些情况下,可执行组件名在顶部的[]中,底部是其调用的组件linux查看哪个程序占用端口,等等,直至tcp/ip部份。注意此选项
可能须要很长时间,假若没有足够权限可能失败。
-e显示以太网统计信息。此选项可以与-s选项组合使用。
-s显示按合同统计信息。默认地,显示ip、ipv6、icmp、icmpv6、tcp、tcpv6、udp和udpv6的统计信息。
-r显示路由表。
-v与-b选项一起使用时将显示包含于为所有可执行组件创建联接或窃听端口的组件。
interval重新显示选取统计信息,每次显示之间暂停时间间隔(以秒计)。按ctrl+c停止重新显示统计信息。假如省略,netstat显示当前
配置信息(只显示一次)。