在Windows下测试Apache遇到的80端口占用问题
虽然我这个blog(www.ncgp.net)跑在Linux服务器上,但许多调试工作还是只能用WAMP体系,即,Windows+Apache+MySQL+PHP,许多人对这个体系很是鄙视,其实我认为,如非必须使用Windows,谁也没有必要这样来用Apache,因此,苹果粉丝和命令行专家可以绕过此文了:) 下面,我来谈一谈我在配置WAMP时频繁遇到的一个问题:80端口占用。(非IIS占用) 两年多以前,我曾经发现Skype有这个坏毛病(由于用Skype不多,现在我也不知道Skype的目的在何,欢迎赐教)。几个月前,又发现PPLive也有这个毛病,只不过那次根据处理Skype问题的经验,我很快就解决了。今天,又再次遇到这个问题时,我困惑了:既没有PPLive,也没有Skype,80还是被占用了。用netstat看端口的pid,也发现很奇怪:有时候不显示80,有时候又显示为0,这是系统限制资源,显然不是我要找的“元凶”。
Google了“pid 0 80 port”,看到了答案:
Try typing ‘netstat -ao’ (with an ‘a’) at CMD and that will give you a list of everything running on each port.
我一眼就看到了那个“罪魁祸首”:
C:\Users\awflasher>netstat -ao Local Address Foreign Address State PID TCP TCP 0.0.0.0:21 Pacers:0 LISTENING 511 TCP 0.0.0.0:80 Pacers:0 LISTENING 6421
用tasklist的FILTER,我们可以很快找到这个进程:
C:\Users\awflasher>tasklist /FI "PID eq 6421" Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ MxDownloadServer.exe 6421 Console 1 7,980 K
原来是我电脑中“遨游浏览器”的进程。我使用遨游只是为了调试页面代码,这里我不做评价,浏览器这种敏感的话题,人各有志,各取所好。 PS:看了看netstat的帮助,分别如此描述-a和-o,也就明白了:
-a Displays all connections and listening ports. -o Displays the owning process ID associated with each connection.
在本地用WAMP调试WordPress的blogger如果遇到类似的情况(症状主要是Apache无法启动),则可以用netstat -ao和tasklist来查出80端口到底被谁抢占了。 附,我所知道的Windows上一些默认占用80端口的非Web服务器类软件清单,欢迎补充:
- Skype
- Web迅雷
- PPLive(可能是pp.tv,我懒得管了)
- 傲游浏览器自动更新
- 迅雷默认的BT上传端口(网友补充)
- fs2you网盘(网友补充)
- Cisco IP Communicator(网友补充)
- QQMusic(网友补充)