80端口被System进程占用的问题
发现问题
今天准备测试一些PHP脚本,于是打开了久违的XMAPP环境。
但是XMAPP环境并没有像以往的那样正常地启动起来,而是在日志区域显示了这样的一段提示:
XMAPP环境无法启动,红色提示说80口被PID为4的进程占用。
然后我看了下Netstat的记录,确实是被PID为4的进程占用了:
说明一下
netstat
的指令:
我使用的指令是netstat -ano
,其中:-a
是显示所有连接和监听端口;-n
是以数字IP地址的方式显示地址和端口号,如果不写这一项会看到“外部地址”一列有的会显示为域名或主机名;-o
是显示连接对应进程的ID
所以,要查明对应关系,必须至少输入“netstat -ao
”。
当然,如果你发现列表太长找不到你要找的80口数据,你可以附加一个处理字符串的“|findstr 80
”就可以精确定位出几条80口的连接记录了。
解决方法
遇到这种情况,首先要确定占用进程是哪个。
我们用到的是每个电脑都有的软件——“Windows任务管理器”。
什么?你不知道怎么打开“任务管理器”?
……同时按住Ctrl+Alt+Delete,就能看到“启动任务管理器”的选项(Win 7)或者直接打开了“任务管理器”(Windows XP)。
……或者在任务栏上面打开右键菜单也能找到“启动任务管理器”选项。
将“任务管理器”切换到“进程”面板,查找一下PID为4的进程。一般显示的都是System。这是一个系统进程,使用右下角的“结束进程”没有办法关闭这个进程。
如果你的“Windows任务管理器”里面看不到“PID”一列,你可以将其显示出来。方法如下:
- 打开“查看”菜单,点击“选择列...”菜单项。
- 在打开的新窗口中勾选“PID”一行,点击“确定”即可。
遇到这种情况就只能重启么?不,不一定!
可以去看下你最近安装的服务,将他们关闭一下试试看!
比如说:
我前段时间为了测试IIS下面的伪静态路由,在这部Windows 7下面安装了IIS套件。而这个套件的万维网服务(W3SVC)也是隐藏在System进程中占用80口的罪魁祸首。
在Win XP中IIS相关的服务都是使用独立的inetinfo.exe进程,比较容易看出是IIS在占用,
而到了我使用的Win 7的时候,IIS服务的启动指令已经变成了`C:\\Windows\\system32\\svchost.exe -k iissvcs`
这个“Windows服务主进程”的模式来运行,这个时候看到的监听端口的进程很有可能被显示成System。
这时候,只要关闭对应的服务就能释放出被监听的80端口了。
打开“服务”管理页的方法:
- “计算机”(或者“我的电脑”)右键菜单选择“管理”打开的窗口中展开左侧树的“服务和应用程序”节点,找到“服务”一项。
- “控制面板”里面找到“系统和安全”(如果显示的是分类界面)里的“管理工具”,双击“服务”快捷方式打开。
- 打开“开始”菜单,选择“运行...”,然后输入“
services.msc
”即可打开。
当然,并不是所有人都像我这样被IIS这样“愚蠢”的占用问题折腾地到处搜索答案。除了IIS以外,我搜索到的情况中有人是被SQL Server 2008中的报表服务所占用的。
所以,别因为多次重启后80口还是被占用而准备重装系统,很有可能是一些你前些时间安装的服务搞的鬼。