ポートの競合を一発解消

プログラミング

PCのライトユーザーならポートの存在など知らなくても一生問題ない。
(そもそもポートって何?という人はこちら)
ただ一度エンジニアの扉を叩くとこのポートの概念はしばしば登場する。
特に問題となる局面はポートの競合ではないだろうか?

使いたいサービス同士で同じポートを使おうとしていて後から使いたい方が使えないというものだ。

基本こういった場合、先にそのポートを使っているサービスを停止したり、または後から使うサービスのポートを変更して行うことになる。

ただ、ときにそもそも誰がそのポートを使っているかわからなかったり、サービスの不具合によってそのポートを専有し続けてしまう場合がある。

今回はそういった時に一発解消する手順を紹介する。

手順

Mac & Linux

まずはシェル(黒い画面)に移動し
まずは誰がそのポート(今回は8080)を使っているのかを調べる

$ lsof -i -P | grep 8080

lsof(list open files)は現在開いているファイルの一覧するコマンド。
これに
-i:ネットワークソケットを対象にする
-P:ポート名の換わりにポート番号を表示する
のオプションを使ってポートを使っているプロセスをすべて探し、
その結果の中から8080ポートを使っているプロセスを表示させるコマンドだ。

エクリプスあるあるなのだが、今回エクリプスから起動したサーバーが落としたにも関わらず動きっぱなしになってしまっている。こいつを強制的に停止させよう。

$ kill -9 30962

killは殺すという意味の英単語、起動しているプロセスを終了する際に使う
-9:デフォルトよりも強制的に終了させる
そしてプロセスid(今回は30962)を指定すれば完了だ。

コマンドも簡単で一瞬でサービスをキルすることができた。

Windows

コマンドプロンプトを開いて以下を入力

netstart -aon | find "8080"

以下は実際の実行画面

すべての使用中ポートの一覧を取得し、その中から8080ポートを絞り込んでいる。
以下はnetstat コマンドのオプション説明

-a すべての接続とリッスン ポートを表示。
-o 各接続に関連付けられた各接続を所有するプロセス ID を表示。
-n アドレスとポート番号を数値形式で表示

PIDを確認してコマンドを入力する

taskkill /f /pid 12948

実際に入力している様子

今回はプロセスidが 12948 をkillしている。/f オプションをつけると強制敵にkillをすることができる。

コメント

タイトルとURLをコピーしました