特定のポートを使っているプロセスを突き止める方法

gulp-connect-phpでPHPサーバーを立ち上げ,Ctrl+Cしてサーバーを停止させたつもりだったが,何らかの原因でサーバープロセスがポートを専有し続け,次回Gulpをした時にそのポートはすでに使われていますよ!と警告を表示されたことがあった. ここではどのプロセス(PID)がどのポートを使用中なのかを突き止めkillコマンドでそのプロセスを停止させるまでの方法をまとめる.

プロセスを突き止める!

今回はTCPのポート8000を使うPHPサーバーが意図せずして動作し続けてしまった場面を想定してみよう. 次のコマンドでTCPの8000を使用しているプロセスを表示できる. lsof -wi tcp:8000 今回は使用中のプロセスを調べるだけなので-wで警告の表示を抑制した. iオプションに続いてプロトコル名(ここではTCP)を入力することで,そのプロトコルを利用しているプロセス一覧を表示してくれる.

プロトコル名の後に:(コロン)をつけてサービス名(/etc/services中の名前で例えばftpやhttpなど),もしくはポート番号を入力することで,検索対象を特定のサービスやポート番号に絞ることが出来る.

今回の例ではTCPのポート8000を利用しているプロセスを一覧表示してくれる. PHPサーバーがポート8000で立ち上がっていると次のような結果が表示される
COMMAND  PID    USER      FD  TYPE  DEVICE              SIZE/OFF  NODE  NAME
php      25746  Username  3u  IPv4  0x0123456789abcdef  0t0       TCP   localhost:irdmi (LISTEN)
phpコマンドがPID25746で動いていることがわかった. 後はこれをkillすれば良い.

プロセスをkill!

ポートを専有しているプロセスをkillしよう. 次のコマンドでkillできる. kill -9 25746 -9は指定したプロセスを強制的にkillするためのオプション(-KILLというエイリアスもある). その後に続く数値はkillしたいプロセスのPIDである. これでPHPサーバーは死んだ...
このような状況に陥ることは滅多に無いが,もしもの時にプロセスを調べる術を覚えておくと便利であるし,何よりターミナルを使いこなせている感が味わえるのでなんだか嬉しい気分になれるはず.
4129900653958489140 https://www.storange.jp/2018/05/blog-post.html https://www.storange.jp/2018/05/blog-post.html 特定のポートを使っているプロセスを突き止める方法 2018-05-10T12:37:00+09:00 https://www.storange.jp/2018/05/blog-post.html Hideyuki Tabata 200 200 72 72