Как узнать, какая программа заняла порт
Когда программа пишет, что порт уже занят, сначала узнайте, кто его держит. Дальше два пути: остановить ту программу или запустить свою на другом номере.
На сервере с 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 nginxnginx — пример, подставьте имя своей службы. Не останавливайте 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 занят веб-сервером | Разбор |
Источники
- Справка ss для Ubuntu 24.04 — ключи -t, -u, -l, -n и -p.
- Справка systemctl для Ubuntu 24.04 — команда status принимает номер процесса.
- Справка lsof для Ubuntu 24.04 — ключи -i, -s, -n и -P; на Mac они те же.
- Microsoft: Get-NetTCPConnection — какие порты слушает Windows и номер процесса.
- Microsoft: netstat — ключи -a, -n и -o.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026