特定のポートをリッスンしているプロセスを調べる
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 することができます。