【Windows】Portを占有しているプロセスを見つけて強制終了する

最近vue.js使ったWebサービス開発の勉強をしてたのですが、ある時npm run serveを叩いてもlocalhostに繋がらなくなったので、その対応メモです。

ポートを占有しているプロセスを見つける

まずは、ポートを占有しているプロセスを見つけます。今回は8080番ポートに繋がらなくなったので、このポートを占有しているプロセスを特定します。

c:\>netstat -ano | find ":8080"
  TCP         0.0.0.0:8080           0.0.0.0:0              LISTENING       2272

今回の場合ですと、PIDが2272のプロセスが8080番ポートを占有しているようです。

なお、netstatで使用しているオプションの意味合いはこんな感じです。

aすべてのポートを表示
n名前解決をせずに表示(IPアドレスのまま表示)
oプロセスID(PID)を表示

プロセスを確認&強制終了する

PIDからプロセス名の特定は、タスクマネージャーを使えば簡単にできます。

タスクマネージャーを開いて、詳細タブを開きPIDからプロセス名を特定します。この場合ですと、PID 2272のプロセスはnodeであることがわかります。

あとは、nodeを選択してタスクの終了をクリックすると、8080番ポートを占有していたプロセスを強制終了できます。

番外編 ~コマンドでプロセスを確認&強制終了する~

タスクマネージャーを使わなくても、コマンドを使用しても同様のことができます。

PIDからプロセス名を確認する

Windowsにはpsコマンドはありませんが、似たようなコマンドとして、tasklistコマンドというものがあります。

このコマンドを使用しても、PIDからプロセス名を特定できます。

c:\>tasklist | find "2272"
node                          2272 Console                    1    266,048 K

ポート占有しているプロセスを強制終了する

Windowsにもkillコマンドっぽいコマンドとしてtaskkillコマンドがあるので、コマンドからもプロセスを強制終了できます。

c:\>taskkill /F /PID 2272

ただ、管理者権限のコマンドプロンプトでこのコマンドを叩いても、こんな感じでエラーが表示されて終了できない場合があったので、タスクマネージャーから強制終了するのが間違いないと思います。

c:\>taskkill /F /PID 2272
エラー: PID 2272 のプロセスを強制終了できませんでした。
理由: アクセスが拒否されました。

アクセスが拒否される原因をご存知の方は教えてください・・・

参考:

[TIPS]Windowsで、あるポート番号をListenしているプロセスを調べてkillする - Qiita
あるポート番号をListenしているプロセスを調べるnetstatコマンドで一覧取得するfindで絞り込む(grepのような機能)例ポート番号 8080 をListenしているプロセス(PI…

コメント