Привет, коллеги. Как-то нашёл на просторах GitHub интересную утилиту под названием Kill Port. Утилита написана на Bash.

Kill Port — инструмент командной строки для уничтожения процесса, запущенного на определённом порту.

Ситуация. Запускаю я, например, какое-нибудь Node.js-приложение или Gunicorn, а оно начинает орать: а у тебя порт уже занят. Начинается беготня с выяснением, а кто это сделал?

Особенно актуально при локальной разработке: где-то в фоне что-то висит и радуется. Естественно, никогда не можешь вспомнить, что нужно набрать в консоли, чтобы узнать, какой процесс занимает порт (конечно, кроме 80 и 443, все и так знают, что это Nginx).

Лезешь в гугол, находишь в очередной раз lsof -i :3000, киляешь всё это в надежде. И так далее.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Автор Kill Port, видимо, тоже исстрадался и изобрёл свой осиновый кол. Суть утилиты простая: скармливаешь ей порт, который нужно освободить, она находит все эти процессы и завершает их. На гифке это наглядно всё представлено. Удобно!

Можно форкнуть проект и добавить туда известные процессы, тот же Nginx и Gunicorn, чтобы корректно их завершать, а не килить через -9 (SIGKILL). Хотя это лишнее. Kill Port работает из коробки, что ещё нужно.

Есть нюанс при установке, там чёт у него в инсталляторе напутано, поэтому просто клоним скрипт killport, кидаем в /usr/local/sbin с атрибутом +x.

Для macOS утилита тоже работает, ставится через:

brew install killport

Kill Port может не завершить некоторые процессы, работающие на уровне ядра, к примеру NFS / portmapper / WireGuard. К ним не прикреплён соответствующий PID, но это крайние случаи. Для большинства сценариев Kill Port успешно прикончит процесс.

Страница проекта на GitHub