Как убить процесс в macOS работающий на определенном порте?

Во время разработки бывает так, что определенный процесс завис и его нужно убить вручную. Например, при работе с Ruby on Rails - иногда нужно убить сервер, который работает на 3000 порте. Рассмотрим, как это сделать:

Открываем терминал и вводим:

sudo lsof -i tcp:3000

Введем пароль пользователя и получим такой результат:

COMMAND   PID       USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
ruby    47571 username   13u  IPv4 0x8d4c374540e3545      0t0  TCP localhost:hbci (LISTEN)
ruby    47571 username   14u  IPv6 0x8d4c374540da2d5      0t0  TCP localhost:hbci (LISTEN)

Получаем довольно информативную таблицу (если на порте ничего нет - в терминале будет пусто). Нам понадобится PID процесса, чтобы убить его:

kill -9 PID # команда принудительного завершения процесса

kill -9 47571 # в нашем случае PID - 47571

Таким образом мы принудительно убили процесс на 3000 порте, который был занят Ruby on Rails приложением.

Вот так выглядит лог принудительного завершения работы сервера Puma на локальной машине с macOS (последняя строка):

=> Booting Puma
=> Rails 6.0.1 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Killed: 9

Стоит отметить, что 3000 порт и Ruby on Rails приложение были приведены в качестве примера, а команды sudo lsof -i tcp:PORT и kill -9 PID - универсальны.
Наверх