4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ポート競合時のプロセス特定と強制終了【PowerShell × Windows】

概要

ローカル開発中、ポート番号の競合(conflict)が原因でアプリケーションが起動しないケースはよくある。
特にバックエンドアプリケーションやフロントエンド開発サーバなど、指定ポートへのバインドが失敗する際、以下のようなエラーが出力される。

  • Error: listen EADDRINUSE: address already in use :::3000
  • bind: Address already in use

このようなエラーに対して、原因プロセスの特定と強制終了というアプローチは即効性があり、再発防止のための分析材料としても有効だ。

本記事では、Windows環境 × PowerShell 上で、対象ポートを占有しているプロセスを見つけ、的確にタスクを終了させる手順を解説する。


対象環境

OS   : Windows 10 / 11  
Shell: PowerShell 5.x / 7.x  

利用するコマンド群

以下の2ステップで処理する。

  1. ポートを使用しているプロセスを特定
  2. 特定したプロセスID(PID)を強制終了
# Step 1: 特定のポート番号を使っているプロセスを調査
netstat -ano | findstr :3000
# Step 2: 該当プロセス(PID)を強制終了
taskkill /F /PID 1234

解説

1. netstat -ano | findstr :<port>

  • netstat -ano
    • -a: すべての接続とリスニングポートを表示
    • -n: アドレスとポートを数値形式で表示
    • -o: 各接続に関連するプロセスID(PID)を表示
  • findstr :3000
    • 出力結果からポート3000を使っている行をフィルタ

このコマンドで、対象ポートにバインドされているプロセスIDを把握できる。

2. taskkill /F /PID <pid>

  • /F: 強制終了(Force)を指定
  • /PID: 終了対象のプロセスIDを指定

たとえばPIDが1234なら以下のように入力:

taskkill /F /PID 1234

注意点

  • PIDの特定には管理者権限が必要な場合がある。
    • PowerShellは「管理者として実行」推奨。
  • 誤ってシステムプロセスをkillしないよう、netstat出力をよく確認すること。
  • アプリケーションによっては終了しても自動再起動される場合がある(サービス設定等)。

応用:ポートを指定して自動終了スクリプト化

以下のようにスクリプト化して、任意のポートを指定して自動的に対象プロセスをkillすることも可能だ。

$port = Read-Host "Enter port number"
$line = netstat -ano | findstr ":$port"
if ($line) {
    $pid = ($line -split '\s+')[-1]
    Write-Output "Killing PID: $pid"
    taskkill /F /PID $pid
} else {
    Write-Output "No process found using port $port"
}

結語

ポート競合のトラブルは開発の初期段階で頻出する。
その都度、原因を手動で探るのではなく、即応できるPowerShellスニペットを習慣化しておくことが、スマートな開発者としての第一歩だ。

ローカル環境での安定した開発体験は、こうした細やかなオペレーションの積み重ねによって支えられている。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?