Windows10になってから、ローカルで立ち上げているXamppのApacheの起動が失敗するようになってしまいました。
原因としては、パソコンの起動のタイミングで、Apacheと同じ80番ポートで、何か別のアプリまたはプロセスが立ち上がっており、後から起動するApacheがエラーになるというものでした。
結局、どのアプリが80番ポートを抑えているのかを確認し、そのアプリをストップすることでApacheが動くようになりました。
そこでこの記事では、
- Windowsで、特定のポートが使用されているかを確認し
- そのポートを使用しているアプリを特定する
方法について記載します。
Windowsで使用されているポートを確認する方法
Windowsでどのポートが使われてるかを確認するには「netstat」コマンドを使います。
一緒にそのポートを使用しているプロセスのID(IPD)も表示させておけば、後程そのPIDからアプリも分かりますので、以下のコマンドプロンプトを立ち上げて、以下を入力しましょう。
コマンドプロンプトは、スタートメニューから「Windowsシステムツール」⇒「コマンドプロンプト」を開くか、右下の検索窓に「cmd」と入力して開くことができます。
netstat -ano
オプションは
a・・・有効な接続以外もすべて表示対象とします。
n・・・名前解決しないて、IPとポート番号をそのまま表示します。
o・・・対応するプロセスIDを表示します。
表示された結果は以下の通り。
左から プロトコル、ローカルアドレス、外部アドレス、状態、PIDです。
確認したいポート番号が決まっている場合
もし、確認したいポート番号が決まっている場合は
netstat -nao | find “ポート番号”
と打つと、そのポート番号が含まれている行だけが表示されます。
大量に結果が表示されて、探すのが大変な場合などに便利です。
ポート番号を使用しているアプリケーションを特定する
上記のコマンドで確認した結果、目的のポート番号がすでに使われている場合、それがどのアプリケーションなのかを確認します。
それには、上記のコマンドで表示された結果の一番右のPIDの値を使います。
PIDからアプリを特定するにはタスクマネージャを使います。
デスクトップの下のバーを右クリックして「タスクマネージャー」を開くか、Windowsのデスクトップ画面で、Ctrl+Alt+Delete を押して、タスクマネージャーを起動させます。
「詳細タブ」を押すと、以下の画像のようにどのアプリがどのPIDなのかを特定して確認することができます。
もし、表示されたタスクマネージャーが以下のように簡易表示であれば、右下の「詳細」ボタンを押せば上記のような詳細表示となります。
タスクマネージャを起動しても詳細タブが無い場合
Windows7やWindows Server 2008のように、タスクマネージャを起動しても詳細タブが無い場合は、以下の手順で「PID」を表示させます。
これにより、ログインユーザー以外のsystemなどで実行されているプロセスも表示します。
「PID」が表示できたら、一覧から「PID」列を確認して目的のプロセスを探します。
探せたら、該当プロセスの行で右クリックして「プロパティ」をクリックすると、実行しているexeの詳細内容も確認できます。
上記の工程をコマンド一発で行う場合
実は、上記のやり方をコマンドを一回入力するだけで実現する方法があります。
netstatのbオプションを使う方法です。
bオプションを使うと、対応する実行サービス名を下に表示できます。
この方法だと表示が複数行になるので、findを使った絞り込みはできませんが、その後「sc」コマンドで詳細を確認できるのがメリットです。
また、bオプションを使うには、コマンドプロンプトを管理者権限で実行する必要があります。
netstat -anob
bオプションを付けてnetstatを実行すると、サービス名とexe名の行が追加されていることが分かりますね。
サービス名が分かれば、scコマンドでその詳細を表示できます。
上記の例でいうとサービス名「RpcSs」の詳細を表示させると、以下のようになります。
sc rc <サービス名>