PCのライトユーザーならポートの存在など知らなくても一生問題ない。
(そもそもポートって何?という人はこちら)
ただ一度エンジニアの扉を叩くとこのポートの概念はしばしば登場する。
特に問題となる局面はポートの競合ではないだろうか?
使いたいサービス同士で同じポートを使おうとしていて後から使いたい方が使えないというものだ。
基本こういった場合、先にそのポートを使っているサービスを停止したり、または後から使うサービスのポートを変更して行うことになる。
ただ、ときにそもそも誰がそのポートを使っているかわからなかったり、サービスの不具合によってそのポートを専有し続けてしまう場合がある。
今回はそういった時に一発解消する手順を紹介する。
手順
Mac & Linux
まずはシェル(黒い画面)に移動し
まずは誰がそのポート(今回は8080)を使っているのかを調べる
$ lsof -i -P | grep 8080
lsof(list open files)は現在開いているファイルの一覧するコマンド。
これに
-i:ネットワークソケットを対象にする
-P:ポート名の換わりにポート番号を表示する
のオプションを使ってポートを使っているプロセスをすべて探し、
その結果の中から8080ポートを使っているプロセスを表示させるコマンドだ。

エクリプスあるあるなのだが、今回エクリプスから起動したサーバーが落としたにも関わらず動きっぱなしになってしまっている。こいつを強制的に停止させよう。
$ kill -9 30962
killは殺すという意味の英単語、起動しているプロセスを終了する際に使う
-9:デフォルトよりも強制的に終了させる
そしてプロセスid(今回は30962)を指定すれば完了だ。
コマンドも簡単で一瞬でサービスをキルすることができた。
Windows
コマンドプロンプトを開いて以下を入力
netstat -aon | find "8080"
以下は実際の実行画面

すべての使用中ポートの一覧を取得し、その中から8080ポートを絞り込んでいる。
以下はnetstat コマンドのオプション説明
-a すべての接続とリッスン ポートを表示。
-o 各接続に関連付けられた各接続を所有するプロセス ID を表示。
-n アドレスとポート番号を数値形式で表示
PIDを確認してコマンドを入力する
taskkill /f /pid 12948
実際に入力している様子

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