Ошибка «Address already in use»: как узнать, кто слушает порт, и как штатно остановить службу или завершить процесс.
Содержание
Служба не запускается с ошибкой «Address already in use» — значит, порт уже занят другой программой. Сначала узнайте, какой.
Кто занял порт
sudo ss -ltnp 'sport = :80'
В выводе будут имя программы и номер процесса (pid). Буквы в ключе: l — слушающие порты, t — TCP (u — UDP), n — номера портов вместо названий, p — процессы. Все занятые порты сразу: sudo ss -ltnp.
То же другими командами: sudo lsof -i :80 или sudo fuser -v -n tcp 80, если они установлены. Во FreeBSD: sockstat -4 -l -p 80.
Как освободить
Если порт держит служба, остановите её штатно — тогда она не запустится снова сама:
sudo systemctl stop nginx
sudo systemctl disable nginx # если служба не нужна и после перезагрузки
Если это отдельный или зависший процесс, завершите его по номеру:
sudo kill 1524 # попросить процесс завершиться
sudo kill -9 1524 # принудительно — если через несколько секунд процесс ещё жив
kill -9 не даёт программе сохранить данные. Базу данных так не останавливайте — только через её службу.
