他のプログラムに80番ポートが専有されてApacheが起動できない場合の対処方法

久々にWindowsでApacheを起動してみたらエラーが。
httpd.exeを直接起動してエラーメッセージを確認してみた。

(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、
またはポートのどれか 1 つのみを使用できます。 
make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

ググってみたら、他のプログラムによってすでに80番ポートが使われている場合に起こるエラーらしい。IISが立ち上がっている場合が多いらしいが、IISは起動していない。

80番ポートを使用しているプログラムの特定

任意ポートを使用しているプログラムは、WindowsXPでは次のようにして調べることが出来る。

netstat -oan

これで、ポートを開いているプロセスの一覧が表示される。(-oはPIDの表示、-aは全ての接続を表示、-nはアドレス・ポートを数値で表示)
ここで、80番を使用しているプロセスのPIDを覚えておき、タスクマネージャでそのPIDに対応するプログラム名を調べる。
タスクマネージャのプロセスタブでPIDを出すには、「表示 > 列の選択」でPIDをチェック。PID順にソートすると見つけやすくなる。

今回の場合、80番ポートを使用しているのはなんとSkypeだった。Skypeを起動している間は、デフォルトでは80番ポートが使われるようだ。80番を使うのはFirewall回避のためであろう。

Skypeで80番ポート以外を使用するようにする

ツール > 設定 > 詳細 > 接続

を開き、「上記ポートに代わり、ポート80を使用」のチェックを外すことで、ランダムなポート番号が使われるようになる。
環境によっては通話できなくなる可能性があるので注意。