Инструкции

Как узнать, какая программа заняла порт

Когда программа пишет, что порт уже занят, сначала узнайте, кто его держит. Дальше два пути: остановить ту программу или запустить свою на другом номере.

Обновлено 10.10.2026≈ 3 мин чтения
Содержание 6

На сервере с Ubuntu

Команды для сервера вводятся после подключения к нему по SSH (как подключиться). Введите команду, подставив свой номер порта вместо 80:

sudo ss -tlnp | grep ':80 '

Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — так и должно быть: наберите пароль и нажмите Enter. Пример ответа:

LISTEN 0      511          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=1234,fd=6))

В конце строки — users:(("nginx",pid=1234,fd=6)): порт держит программа nginx, номер её процесса (PID) — 1234. Если ответ пустой, порт TCP свободен.

Какая служба запустила программу

systemctl status 1234

Вместо 1234 подставьте номер процесса из ответа ss. В первой строке ответа — имя службы, например nginx.service. Чтобы вернуться к вводу команд, нажмите клавишу Q.

Как освободить порт

Если эта программа вам не нужна, остановите службу и выключите её автозапуск:

sudo systemctl stop nginx
sudo systemctl disable nginx

nginx — пример, подставьте имя своей службы. Не останавливайте nginx, если на нём работает ваш сайт: тогда лучше запустить свою программу на другом порту.

Если systemctl status не показал службу, программа запущена вручную. Остановите её в том окне, где она работает (Ctrl+C), или командой kill 1234 с её номером процесса.

Если порт занял контейнер Docker, разбор — в статье port is already allocated.

На Mac

Откройте Терминал (как открыть) и введите, подставив свой номер порта вместо 3000:

lsof -nP -iTCP:3000 -sTCP:LISTEN

В колонке COMMAND — имя программы, в колонке PID — номер процесса. Если ответ пустой, порт свободен. Закройте программу обычным способом, а если она не отвечает — командой kill с номером из колонки PID, например kill 1234.

В Windows

Откройте терминал: нажмите Win+X или щёлкните правой кнопкой по «Пуску» и выберите «Терминал» (в некоторых версиях пункт называется Windows PowerShell). Введите, подставив свой номер порта вместо 3000:

Get-Process -Id (Get-NetTCPConnection -LocalPort 3000 -State Listen).OwningProcess

В колонке ProcessName — имя программы, в колонке Id — номер процесса. Если порт свободен, PowerShell сообщит об ошибке: подключений на этом порту нет.

Тот же ответ даст команда для «Командной строки»:

netstat -ano | findstr :3000

В последней колонке — номер процесса. Имя программы по номеру покажет команда, где вместо 1234 — номер из ответа netstat:

tasklist /FI "PID eq 1234"

Ошибки и как их исправить

ОшибкаЧто случилосьРазбор
bind() to 0.0.0.0:80 failed (98: Address already in use) у nginxПорт 80 или 443 занят другой программойРазбор
port is already allocated у DockerПорт занят другой программой или контейнеромРазбор
Could not bind TCP port 80 у CertbotПорт 80 занят веб-серверомРазбор

Источники

Сверено 10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026