在Windows下测试Apache遇到的80端口占用问题

虽然我这个blog(www.awflasher.com/blog/)跑在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:Usersawflasher>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:Usersawflasher>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(网友补充)