Address already in use
ローカルでサーバー開発している際
Caused by: java.net.BindException: Address already in use
など、プロセスが残ったままで起動に失敗することがままある。
とりあえずkillする際、順当にやるのであれば
起動中のポートを調べる
コマンド
lsof -i:8080
結果
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 5229 growsic 231u IPv6 0x37f621378bd0a299 0t0 TCP *:http-alt (LISTEN)
でPIDをコピーし
プロセスをkill
kill -9 5229
のように行う。
ただ、特定のポートをkillしたいだけなのにめんどくさい。
解決策
コマンドの方針としては
- lsofでポートの数字のみを抜き出す
- 抜き出したポートを引数にkillする
のように行う。
lsofでポートの数字のみを抜き出す
コマンド
lsof -t -i:8080
-t
オプションをつけることで、ポートの数字のみを取得できる
結果
5229
抜き出したポートを引数にkillする
コマンド
kill -9 $(lsof -t -i:8080)
lsof -t -i:8080
を先に評価し、得られた数字を引数にkillコマンドが実行される。
結論
コマンド
kill -9 $(lsof -t -i:{ポート番号})