特定のポートをリッスンしているプロセスを調べる

Posted on

Amazon EC2 に Nginx をインストールして起動しようとすると、以下のようなエラーが出て起動に失敗しました。

$ sudo service nginx start
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

エラーメッセージにある通り、ほかのプロセスが先に 80 番ポートをリッスンしていたのが原因でした。

特定のポートをリッスンしているプロセスを調べるには lsof コマンドが使えます。ポート番号を調べるには i オプションを使います。なお、lsof コマンドを実行するには root 権限が必要です。

$ sudo lsof -i:80
COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
nginx   27047  root    6u  IPv4 1813885      0t0  TCP *:http (LISTEN)
nginx   27049 nginx    6u  IPv4 1813885      0t0  TCP *:http (LISTEN)

特定のプロセスがポートをリッスンしたまま死んだ場合も PID を調べて kill することができます。